2

我有这些数据,我正在尝试查找字段 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 是重复的

4

3 回答 3

4

代替SELECT DISTINCT,选择字段和行数。用于HAVING过滤掉多于一行的项目,例如:

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

然后,您可以根据查询结果将原始表连接回来。

于 2009-10-01T10:21:45.843 回答
3

一种方法是使用 have 和 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,但是如果没有您想要的实际输出,很难告诉您如何解决这个问题。

于 2009-10-01T10:24:24.980 回答
1
SELECT * 
FROM [TableName]
WHERE ID IN(SELECT MIN(ID) 
            FROM [TableName] 
            GROUP BY CONCAT(field1, field2, field3, field4))

这将返回 id 的 1 和 3 的完整行

于 2009-10-01T10:21:54.703 回答