如何找到重复的字段组合

时间:2009-04-14 17:14:48

标签: sql-server sql-server-2005 tsql

我有一个包含列id,a和b的表。

a + b应该是唯一的,但这是一个未正确约束的遗留数据库。如何为a + b不唯一的记录获取一组id?

如果我有

ID A B
1  2 3
2  2 3
3  1 3
4  1 4

然后我想从查询中获取记录1和2。

3 个答案:

答案 0 :(得分:4)

select
    id, a, b

from your_table t

join (select a, b from your_table group by a, b having count(1) > 1) dup on dup.a = t.a and dup.b = t.b

答案 1 :(得分:3)

要返回行1和2(如您所述),请使用以下命令:

SELECT
  *
FROM
  your_table
  INNER JOIN (
    SELECT a, b FROM your_table GROUP BY a, b HAVING COUNT(*) > 1
  ) dupes ON 
    your_table.a = dupes.a AND
    your_table.b = dupes.b

答案 2 :(得分:1)

使用窗口函数的速度稍快:

select *
from (
     select
        a
     ,  b
     ,  cnt = count(*) over ( partition by a, b )
     from your_table
) x
where cnt > 1; /* Dupe */