Тъй като използвате колоната id като индикатор за това кой запис е „оригинален“:
delete x
from myTable x
join myTable z on x.subscriberEmail = z.subscriberEmail
where x.id > z.id
Това ще остави по един запис на имейл адрес.
редактиране за добавяне:
За да обясните заявката по-горе...
Идеята тук е да се присъедини към масата срещу себе си. Преструвайте се, че имате две копия на таблицата, всяко от които има различно име. След това можете да ги сравните един с друг и да намерите най-ниския идентификатор или за всеки имейл адрес. След това ще видите дублиращите се записи, които са създадени по-късно, и бихте могли да ги изтриете. (Визуализирах Excel, когато мислех за това.)
За да извършите тази операция върху таблица, да я сравните със себе си и да можете да идентифицирате всяка страна, използвате псевдоними на таблица.
Псевдонимите се използват за обозначаване на двата „екземпляра“ на таблицата.
Клаузите за присъединяване и where могат да бъдат комбинирани в този случай:
За да предотвратите дублиране, помислете за превръщането на колоната subscriberEmail в УНИКАЛНА индексирана колона.x
е псевдоним на таблица. Присвоява се в от
клауза така:от
<псевдоним>код> .
x
вече може да се използва другаде в същата заявка, за да се позовава на тази таблица като пряк път. изтрийте x
стартира заявката с нашето действие и цел. Ще извършим заявка за избор на записи от множество таблици и искаме да изтрием записи, които се появяват в x
.от myTable x присъединете се към myTable z на x.subscriberEmail =z.subscriberEmail
блъска масата срещу себе си, където имейлите съвпадат. Без клаузата where, която следва, всеки запис ще бъде избран, тъй като може да бъде съединен срещу себе си. къде
клаузата ограничава записите, които са избрани. където x.id> z.id
позволява псевдонима „екземпляр“ x
да съдържа само записите, които съвпадат с имейли, но имат по-висок id
стойност. Данните, които наистина искате в таблицата, уникални имейл адреси (с най-нисък идентификатор) няма да бъдат част от x
и няма да бъдат изтрити. Единствените записи в x
ще бъдат дублирани записи (имейл адреси), които имат по-висок id
отколкото оригиналния запис за този имейл адрес.delete x
from myTable x
join myTable z
on x.subscriberEmail = z.subscriberEmail
and x.id > z.id