Eftersom du använder id-kolumnen som en indikator på vilken post som är "original":
delete x
from myTable x
join myTable z on x.subscriberEmail = z.subscriberEmail
where x.id > z.id
Detta lämnar en post per e-postadress.
redigera för att lägga till:
För att förklara frågan ovan...
Tanken här är att gå med i bordet mot sig själv. Låtsas att du har två kopior av tabellen, som var och en heter något annat. Sedan kan du jämföra dem med varandra och hitta det lägsta ID eller för varje e-postadress. Du skulle då se dubblettposterna som skapades senare och kan radera dem. (Jag visualiserade Excel när jag tänkte på detta.)
För att göra den operationen på en tabell, jämföra den med sig själv och kunna identifiera varje sida, använder du tabellalias.
Alias används för att referera till båda 'instanserna' i tabellen.
Klausulerna join och where skulle kunna kombineras i detta fall:
För att förhindra dubbletter, överväg att göra prenumerantEmail-kolumnen till en UNIK indexerad kolumn.x
är ett tabellalias. Den tilldelas i från
sats som så:från
x
kan nu användas någon annanstans i samma fråga för att referera till den tabellen som en genväg. ta bort x
startar frågan med vår åtgärd och vårt mål. Vi kommer att utföra en fråga för att välja poster från flera tabeller, och vi vill ta bort poster som visas i x
.från myTable x gå med i myTable z på x.subscriberEmail =z.subscriberEmail
stöter bordet mot sig själv där mejlen matchar. Utan where-klausulen som följer skulle varje post väljas ut eftersom den skulle kunna slås samman mot sig själv. där x.id> z.id
tillåter "instansen" alias x
att endast innehålla de poster som matchar e-postmeddelanden men som har ett högre id
värde. Den data som du verkligen vill ha i tabellen, unika e-postadresser (med lägsta id) kommer inte att vara en del av x
och kommer inte att raderas. De enda posterna i x
kommer att vara dubbla poster (e-postadresser) som har ett högre id
än den ursprungliga posten för den e-postadressen.delete x
from myTable x
join myTable z
on x.subscriberEmail = z.subscriberEmail
and x.id > z.id