Как найти дубликат поля со списком - PullRequest
0 голосов
/ 14 апреля 2009

У меня есть таблица с столбцами 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 ]

4 голосов
/ 14 апреля 2009
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
3 голосов
/ 14 апреля 2009

Чтобы получить обратно строк 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
1 голос
/ 01 мая 2009

Немного быстрее, используя оконные функции:

select *
from (
     select
        a
     ,  b
     ,  cnt = count(*) over ( partition by a, b )
     from your_table
) x
where cnt > 1; /* Dupe */
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...