Karena Anda menggunakan kolom id sebagai indikator catatan mana yang 'asli':
delete x
from myTable x
join myTable z on x.subscriberEmail = z.subscriberEmail
where x.id > z.id
Ini akan meninggalkan satu catatan per alamat email.
edit untuk menambahkan:
Untuk menjelaskan pertanyaan di atas...
Idenya di sini adalah untuk bergabung dengan meja melawan dirinya sendiri. Berpura-pura bahwa Anda memiliki dua salinan tabel, masing-masing bernama sesuatu yang berbeda. Kemudian Anda dapat membandingkannya satu sama lain, dan menemukan id terendah atau untuk setiap alamat email. Anda kemudian akan melihat rekaman duplikat yang dibuat nanti dan dapat menghapusnya. (Saya sedang memvisualisasikan Excel ketika memikirkan hal ini.)
Untuk melakukan operasi itu di atas meja, membandingkannya dengan dirinya sendiri dan dapat mengidentifikasi setiap sisi, Anda menggunakan alias tabel. x
adalah alias tabel. Itu ditetapkan dalam from
klausa seperti ini:from <table> <alias>
. x
sekarang dapat digunakan di tempat lain dalam kueri yang sama untuk merujuk ke tabel itu sebagai jalan pintas.
delete x
memulai kueri dengan tindakan dan target kita. Kami akan melakukan kueri untuk memilih rekaman dari beberapa tabel, dan kami ingin menghapus rekaman yang muncul di x
.
Alias digunakan untuk merujuk ke kedua 'contoh' tabel. from myTable x join myTable z on x.subscriberEmail = z.subscriberEmail
membenturkan tabel dengan dirinya sendiri di mana email cocok. Tanpa klausa where yang mengikuti, setiap record akan dipilih karena dapat digabungkan dengan dirinya sendiri.
where
klausa membatasi catatan yang dipilih. where x.id > z.id
memungkinkan 'instance' alias x
hanya berisi catatan yang cocok dengan email tetapi memiliki id
yang lebih tinggi nilai. Data yang sangat Anda inginkan dalam tabel, alamat email unik (dengan id terendah) tidak akan menjadi bagian dari x
dan tidak akan dihapus. Satu-satunya catatan di x
akan menjadi catatan duplikat (alamat email) yang memiliki id
yang lebih tinggi daripada catatan asli untuk alamat email tersebut.
Gabung dan di mana klausa dapat digabungkan dalam kasus ini:
delete x
from myTable x
join myTable z
on x.subscriberEmail = z.subscriberEmail
and x.id > z.id
Untuk mencegah duplikat, pertimbangkan untuk membuat kolom subscriberEmail sebagai kolom terindeks UNIK.