SQL-запрос различен по нескольким столбцам - PullRequest
1 голос
/ 01 октября 2009

У меня есть эти данные, и я пытаюсь найти случаи, когда есть разные идентификаторы, но дублирующие данные в поле 1,2,3,4

id    field1 field2 field3 field4    
====  ====== ====== ===== =======    
1       A      B     C      D    
2       A      B     C      D    
3       A      A     C      B   
4       A      A     C      B

так, как только возможно, в этом случае я хочу, чтобы это как-то показывало мне:

1 & 2 являются дубликатами 3 и 4 дубликаты

Ответы [ 3 ]

4 голосов
/ 01 октября 2009

Вместо SELECT DISTINCT выберите поля и количество строк. Используйте HAVING, чтобы отфильтровать элементы с более чем одной строкой, например:

select field1
      ,field2
      ,field3
      ,field4
      ,count (*)
  from foo
 group by field1
         ,field2
         ,field3
         ,field4
having count (*) > 1

Затем вы можете объединить исходную таблицу с результатами запроса.

3 голосов
/ 01 октября 2009

Один из способов сделать это - использовать наличие и группировать по


esben=# select * from test;
 id | a | b | c | d
----+---+---+---+---
  1 | 1 | 2 | 3 | 4
  2 | 1 | 2 | 3 | 4
  3 | 1 | 1 | 3 | 2
  4 | 1 | 1 | 3 | 2
(4 rows)

esben=# select count(id),a,b,c,d from test group by a,b,c,d having count(id) >1;
 count | a | b | c | d
-------+---+---+---+---
     2 | 1 | 2 | 3 | 4
     2 | 1 | 1 | 3 | 2
(2 rows)

Это не перечисляет фактические идентификаторы, но без фактического вывода, который вы хотите, трудно сказать вам, как это сделать.

0 голосов
/ 01 октября 2009
SELECT * 
FROM [TableName]
WHERE ID IN(SELECT MIN(ID) 
            FROM [TableName] 
            GROUP BY CONCAT(field1, field2, field3, field4))

Это вернет полную строку для идентификаторов 1 & 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...