Наиболее эффективный способ найти и удалить дублирующиеся строки в SQL — это использование ROW_NUMBER() вместе с Common Table Expression (CTE). Этот подход чистый, читаемый и точный.
ROW_NUMBER() присваивает порядковый номер каждой строке в группе дубликатовPARTITION BY определяет, какие столбцы считаются дубликатомORDER BY контролирует, какая строка-дубликат сохранится (обычно та, у которой самый низкий id)WITH CTE AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY col1, col2
ORDER BY id
) AS row_num
FROM table_name
)
DELETE FROM CTE WHERE row_num > 1;
col1, col2 на столбцы, которые определяют уникальность в твоих данныхrow_num = 1 сохраняется; все остальные удаляютсяSELECT вместо DELETE, чтобы посмотреть, какие строки будут удаленыORDER BYPARTITION BYОконная функция ROW_NUMBER() присваивает одинаковый порядковый номер всем строкам в группе раздела, поэтому её нужно обязательно комбинировать с WHERE предложением, чтобы идентифицировать дубликаты.
Новый — ещё не проверен сообществом
Вы