Poiché stai utilizzando la colonna id come indicatore di quale record è "originale":
delete x
from myTable x
join myTable z on x.subscriberEmail = z.subscriberEmail
where x.id > z.id
Questo lascerà un record per indirizzo email.
modifica per aggiungere:
Per spiegare la domanda di cui sopra...
L'idea qui è di unirsi al tavolo contro se stesso. Fai finta di avere due copie della tabella, ognuna con un nome diverso. Quindi potresti confrontarli tra loro e trovare l'ID più basso o per ciascun indirizzo email. Vedresti quindi i record duplicati che sono stati creati in seguito e potresti eliminarli. (Stavo visualizzando Excel mentre pensavo a questo.)
Per eseguire quell'operazione su una tabella, confrontarla con se stessa ed essere in grado di identificare ogni lato, usi gli alias di tabella. x
è un alias di tabella. È assegnato nel from
clausola in questo modo:from <table> <alias>
. x
ora può essere utilizzato altrove nella stessa query per fare riferimento a quella tabella come collegamento.
delete x
avvia la query con la nostra azione e il nostro obiettivo. Eseguiamo una query per selezionare i record da più tabelle e vogliamo eliminare i record che appaiono in x
.
Gli alias sono usati per fare riferimento a entrambe le "istanze" della tabella. from myTable x join myTable z on x.subscriberEmail = z.subscriberEmail
fa urtare il tavolo contro se stesso dove le e-mail corrispondono. Senza la clausola where che segue, ogni record verrebbe selezionato in quanto potrebbe essere unito contro se stesso.
Il where
la clausola limita i record selezionati. where x.id > z.id
consente l'"istanza" alias x
per contenere solo i record che corrispondono alle email ma hanno un id
più alto valore. I dati che vuoi veramente nella tabella, indirizzi email univoci (con l'id più basso) non faranno parte di x
e non verrà cancellato. Gli unici record in x
saranno record duplicati (indirizzi email) che hanno un id
più alto rispetto al record originale per quell'indirizzo email.
Le clausole join e where possono essere combinate in questo caso:
delete x
from myTable x
join myTable z
on x.subscriberEmail = z.subscriberEmail
and x.id > z.id
Per evitare duplicati, considera di rendere la colonna SubscriberEmail una colonna indicizzata UNICA.