Ponieważ używasz kolumny id jako wskaźnika, który rekord jest „oryginalny”:
delete x
from myTable x
join myTable z on x.subscriberEmail = z.subscriberEmail
where x.id > z.id
To pozostawi jeden rekord na adres e-mail.
edytuj, aby dodać:
Aby wyjaśnić powyższe zapytanie...
Chodzi o to, aby dołączyć do stołu przeciwko sobie. Udawaj, że masz dwie kopie tabeli, z których każda ma inną nazwę. Następnie możesz porównać je ze sobą i znaleźć najniższy identyfikator lub dla każdego adresu e-mail. Zobaczysz wtedy zduplikowane rekordy, które zostały utworzone później i możesz je usunąć. (Myśląc o tym, wizualizowałem Excela.)
Aby wykonać tę operację na tabeli, porównać ją ze sobą i móc zidentyfikować każdą ze stron, użyj aliasów tabel. x
to alias tabeli. Jest przypisany w from
klauzula w następujący sposób:from <table> <alias>
. x
może być teraz używany w innym miejscu tego samego zapytania, aby odwoływać się do tej tabeli jako skrótu.
delete x
rozpoczyna zapytanie od naszego działania i celu. Zamierzamy wykonać zapytanie, aby wybrać rekordy z wielu tabel i chcemy usunąć rekordy, które pojawiają się w x
.
Aliasy są używane w odniesieniu do obu „instancji” tabeli. from myTable x join myTable z on x.subscriberEmail = z.subscriberEmail
uderza tabelę o siebie w miejscu, w którym pasują e-maile. Bez klauzuli WHERE, która następuje, każdy rekord zostałby wybrany, ponieważ mógłby zostać połączony ze sobą.
where
klauzula ogranicza wybrane rekordy. where x.id > z.id
zezwala na 'instancję' z aliasem x
zawierać tylko te rekordy, które pasują do e-maili, ale mają wyższy id
wartość. Dane, które naprawdę chcesz w tabeli, unikalne adresy e-mail (o najniższym identyfikatorze) nie będą częścią x
i nie zostaną usunięte. Jedyne rekordy w x
będą zduplikowanymi rekordami (adresami e-mail), które mają wyższy id
niż oryginalny rekord dla tego adresu e-mail.
W takim przypadku klauzule join i where mogą być łączone:
delete x
from myTable x
join myTable z
on x.subscriberEmail = z.subscriberEmail
and x.id > z.id
Aby zapobiec duplikatom, rozważ ustawienie kolumny SubscribeEmail jako kolumny indeksowanej UNIKALNIE.