Иногда вы можете столкнуться с ситуацией, когда в базе данных по ошибке были созданы повторяющиеся записи. вам может потребоваться удалить все повторяющиеся записи, оставив только один экземпляр
давайте возьмем пример, где у нас есть таблица со следующими полями и некоторыми повторяющимися записями. помните, что у нас есть одно поле (Id), уникальное для каждой записи.
давайте посмотрим, сколько повторяющихся записей у нас есть для каждого человека, выполнив следующий запрос.
select name, phone, DOB, COUNT(*) as count from table GROUP BY name, phone, DOB HAVING COUNT(*) > 1;
результат запроса будет выглядеть так.
если вы хотите удалить эти дубликаты по отдельности или просто хотите получить идентификаторы этих дубликатов, вы можете использовать следующий запрос.
select id,name, phone, DOB from table where ( name, phone, DOB) IN ( select name, phone, DOB from table GROUP BY name, phone, DOB HAVING COUNT(*) > 1 )
это вернет все повторяющиеся записи с их уникальными идентификаторами. Затем эти идентификаторы можно использовать для удаления повторяющихся записей, сохраняя только один экземпляр. с помощью следующего запроса.
DELETE FROM table WHERE (id) IN ( select id from ( SELECT id,name, phone, DOB ROW_NUMBER() OVER (PARTITION BY name ORDER BY name) AS row_number FROM table ) AS duplicates WHERE row_number > 1 )
помните, что здесь мы используем столбец name для PARTITION и ORDER, вы также можете использовать любые другие столбцы в зависимости от требований.