Удалить псевдодубликаты из таблицы - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть таблица с дубликатами с единственным полем, которое отличается, и я должен очистить их, это выглядит так:

id1 | some_name    | some_details

id2 | some_name    | some_details

id3 | some_name    | some_details

id4 | another_name | another_details

id5 | another_name | another_details

id6 | another_name | another_details

... и т. Д.

Может ли кто-нибудь помочь с правильным сценарием SQL, который удаляет дубликаты и оставляет, например, следующее:

id1 | some_name    | some_details

id4 | another_name | another_details

Заранее спасибо!

1 Ответ

0 голосов
/ 03 сентября 2018

Для select, просто введите GROUP BY, используйте min(), чтобы получить первый идентификатор для каждой группы:

select min(id), col2, col3
from tablename
group by col2, col3

Для delete нежелательных строк, просто введите GROUP BY, используйте min(), чтобы получить первый идентификатор для каждой группы:

delete from tablename t1
where exists (select 1 from tablename t2
              where t2.c2 = t1.c2 and t2.c3 = t1.c3
                and t2.idcol < t1.idcol)

т.е. удалить строку, если существует другая строка с такими же col2 и col3, но эта строка имеет меньшее значение id.

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