我有一个包含列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。
答案 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 */