Запрос на поиск дубликатов на основе двух столбцов - PullRequest
0 голосов
/ 18 марта 2020

У меня есть сценарий, в котором нам нужно идентифицировать дубликаты записей на основе двух разных столбцов. Например. если в COLA присутствуют повторяющиеся записи, эти записи не должны рассматриваться, как и в случае с COLB. Но, принимая дубликаты, мы не должны рассматривать COLA и COLB вместе. Дубликат следует рассматривать отдельно. Моя таблица ввода приведена ниже.

Таблица ввода

enter image description here

Ожидаемый результат.

enter image description here

Я думал о том, чтобы написать группу по запросу, используя два отдельных запроса, а затем выполнить UNION. Но просто хочу проверить любой другой простой способ найти его.

Ответы [ 3 ]

1 голос
/ 18 марта 2020

Вы можете использовать оконную функцию:

select t.*
from (select t.*, 
             count(*) over (partition by cola) as cola_cnt,
             count(*) over (partition by colb) as colb_cnt
      from table t
     ) t
where cola_cnt = 1 and colb_cnt = 1;
0 голосов
/ 18 марта 2020

Надеюсь, это поможет.

выберите COLA, COLB, COLD из теста, в котором COLB отсутствует (выберите COLB из группы forge.test по COLB, имеющему (count (COLB)> 1)) группу по COLA, имеющей (количество (COLA) = 1);

0 голосов
/ 18 марта 2020

Мы могли бы попытаться использовать существующую логи c здесь:

SELECT COLA, COLB, COLD
FROM yourTable t1
WHERE
    NOT EXISTS (SELECT 1 FROM yourTable t2
                WHERE (t2.COLA = t1.COLA AND t2.PK <> t1.PK) OR
                      (t2.COLB = t1.COLB AND t2.PK <> t1.PK));

Я предполагаю, что в вашей таблице есть некоторый столбец первичного ключа PK. Если его нет, добавьте его. Вы можете использовать COLD вместо PK, предполагая, что значения COLD всегда будут уникальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...