Da du bruger id-kolonnen som en indikator for, hvilken post der er 'original':
delete x
from myTable x
join myTable z on x.subscriberEmail = z.subscriberEmail
where x.id > z.id
Dette vil efterlade én post pr. e-mailadresse.
rediger for at tilføje:
For at forklare forespørgslen ovenfor...
Ideen her er at slutte sig til bordet mod sig selv. Lad som om, at du har to kopier af bordet, som hver hedder noget forskelligt. Så kan du sammenligne dem med hinanden og finde det laveste id eller for hver e-mailadresse. Du vil så se de duplikerede poster, der blev oprettet senere, og kunne slette dem. (Jeg visualiserede Excel, da jeg tænkte på dette.)
For at udføre den handling på en tabel, sammenligne den med sig selv og være i stand til at identificere hver side, bruger du tabelaliasser.
Aliaser bruges til at henvise til begge 'forekomster' af tabellen.
Klausulerne join og where kunne kombineres i dette tilfælde:
For at forhindre dubletter bør du overveje at gøre kolonnen SubscriberEmail til en UNIK indekseret kolonne.x
er et bordalias. Det er tildelt i fra
klausul som sådan:fra
x
kan nu bruges andre steder i den samme forespørgsel til at henvise til den tabel som en genvej. slet x
starter forespørgslen med vores handling og mål. Vi skal udføre en forespørgsel for at vælge poster fra flere tabeller, og vi ønsker at slette poster, der vises i x
.fra myTable x join myTable z på x.subscriberEmail =z.subscriberEmail
støder bordet op mod sig selv, hvor e-mails matcher. Uden hvor-klausulen, der følger, ville hver post blive valgt, da den kunne slås sammen mod sig selv. hvor x.id> z.id
tillader "instansen" kaldet x
kun at indeholde de poster, der matcher e-mails, men som har et højere id
værdi. De data, du virkelig ønsker i tabellen, unikke e-mailadresser (med det laveste id) vil ikke være en del af x
og vil ikke blive slettet. De eneste poster i x
vil være duplikerede poster (e-mail-adresser), der har et højere id
end den oprindelige post for den e-mailadresse.delete x
from myTable x
join myTable z
on x.subscriberEmail = z.subscriberEmail
and x.id > z.id