sql查询在多列上不同

时间:2009-10-01 10:14:49

标签: sql duplicates

我有这些数据,我正在尝试查找字段1,2,3,4中存在不同ID但重复数据的情况

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 个答案:

答案 0 :(得分:4)

而不是SELECT DISTINCT,选择字段和行数。使用HAVING过滤掉多行的项目,例如:

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

然后,您可以根据查询结果重新加入原始表格。

答案 1 :(得分:3)

一种方法是使用having和group by


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)

虽然这并未列出实际的ID,但如果没有实际输出,您很难告诉您如何解决这个问题。

答案 2 :(得分:0)

SELECT * 
FROM [TableName]
WHERE ID IN(SELECT MIN(ID) 
            FROM [TableName] 
            GROUP BY CONCAT(field1, field2, field3, field4))

这将返回id的1&的完整行。 3