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