Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Hapus semua Baris Duplikat kecuali Satu di MySQL?

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.

  1. 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
    
  2. 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;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Alternatif untuk Intersect di MySQL

  2. Bagaimana cara menonaktifkan caching SQLAlchemy?

  3. Pengantar SQL Bergabung

  4. Kueri SQL dari beberapa nilai dalam satu sel

  5. TAMBAHKAN () Contoh – MySQL