Как найти дубликат поля со списком
У меня есть таблица с столбцами id, a и b.
a+b должен быть уникальным, но это устаревшая база данных, которая не ограничена правильно. Как я могу получить набор идентификаторов для записей, в которых a+b не является уникальным?
Если у меня есть
ID A B
1 2 3
2 2 3
3 1 3
4 1 4
Затем я хочу получить записи 1 и 2 обратно из запроса.
3 ответа
Решение
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 и 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
Чуть быстрее, используя оконные функции:
select *
from (
select
a
, b
, cnt = count(*) over ( partition by a, b )
from your_table
) x
where cnt > 1; /* Dupe */