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
idterendah nilai:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name -
Jika Anda ingin mempertahankan baris dengan
idtertinggi 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;