Condividi tramite


Удаление повторяющихся записей из таблицы в SQL Server

"Эти дубликаты так раздражают", сказал админ и удалил все записи в таблице.
Из страшного сна администратора

Представим себе таблицу Peope, имеющую колонки PersonId uniqueidentifier, Name nvarchar, Email nvarchar и захламленную дублирующими записями, от которых нам хотелось бы избавиться. Самый простой способ выполнить следующий запрос:

delete

from p from people p, people t
where p.email = t.email
         and p.name = t.name
         and p.personid > t.personid

Многие так и делают, забывая, что если у записи есть идентификатор, то она вполне себе может быть использована где-то еще и, удалив запись, все связи с ней могут потеряться. Собственно это сообщение я пишу встретившись с таким случаем на одном небольшом форуме. Поэтому предупреждаю - прежде чем что-то удалять, нужно подправить все возможные связи. Например выбрав перед удалением записи во временную таблицу, чтобы затем можно было пройтись по зависимым таблицам и обновить идентификаторы.