Peringatan editor:Solusi ini tidak efisien secara komputasi dan dapat menurunkan koneksi Anda untuk tabel besar.
NB - Anda membutuhkan untuk melakukan ini terlebih dahulu pada salinan percobaan meja Anda!
Ketika saya melakukannya, saya menemukan bahwa kecuali saya juga menyertakan AND n1.id <> n2.id
, itu menghapus setiap baris dalam tabel.
-
Jika Anda ingin mempertahankan baris dengan
id
terendah nilai:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
-
Jika Anda ingin mempertahankan baris dengan
id
tertinggi nilai:DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
Saya menggunakan metode ini di MySQL 5.1
Tidak yakin tentang versi lain.
Pembaruan:Karena orang yang mencari di Google untuk menghapus duplikat berakhir di sini
Meskipun pertanyaan OP adalah tentang DELETE
, harap diperhatikan bahwa menggunakan INSERT
dan DISTINCT
jauh lebih cepat. Untuk database dengan 8 juta baris, kueri di bawah ini membutuhkan waktu 13 menit, saat menggunakan DELETE
, butuh lebih dari 2 jam dan belum selesai.
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;