Удаление дубликатов в строках в SQL
Как найти дублирующиеся строки в таблице?
Для поиска таких строк обычно используется конструкция:
ROW_NUMBER() OVER (PARTITION BY Field1, Field2, .. Field_n ORDER BY Field_k),
где Field1, Field2, .. Field_n — это поля таблицы, на основе которых мы создаем наш ключ и по которым будет происходить выборка и поиск на уникальность.
Подробнее о том, как это работает можно почитать на сайте Microsoft вот по этой ссылке: https://learn.microsoft.com/ru-ru/sql/t-sql/queries/select-over-clause-transact-sql?view=sql-server-ver16
Поэтому ничего нового изобретать мы не будем, а воспользуемся этим кодом и напишем свой запрос:
WITH myDublicatesTable AS
(
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY Field1, Field2, Field3 ORDER BY RecId) AS RN
FROM TableNameWithDuplicateRecords /*Название своей таблицы из которой надо убрать дубли*/
)
delete from myDublicatesTable where RN <> 1
Готово, теперь у нас в исходной таблице останутся только те строки, которые нам нужны, а все дублирующиеся будут удалены.
Наиболее обсуждаемые: