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

Hapus duplikat berdasarkan dua kolom dan pertahankan baris yang memiliki nilai minimum kolom lain

Anda dapat menggunakan kueri ini untuk menghapus semua entri duplikat, meninggalkan entri yang paling awal:

DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;

Perbarui

Solusi alternatif yang seharusnya lebih efisien untuk tabel yang sangat besar adalah membuat salinan, menggunakan indeks UNIK pada baris untuk mencegah penyisipan duplikat:

CREATE TABLE discog_copy (id INT, artist VARCHAR(50), track VARCHAR(50), year INT);
ALTER TABLE discog_copy ADD UNIQUE KEY (artist, track);
INSERT IGNORE INTO discog_copy SELECT * FROM discog ORDER BY year;

Kunci uniknya ada di kombinasi nama artis dan nama trek sehingga memungkinkan artis memiliki trek yang berbeda dan artis yang berbeda memiliki nama trek yang sama. Karena SELECT bagian dari kueri memiliki ORDER BY tahun, itu akan memasukkan kombinasi (artis,trek,tahun) dengan tahun terendah terlebih dahulu dan kemudian catatan identik lainnya (artis, trek) tidak akan dimasukkan karena kunci duplikat.

Demo di rextester




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Migrasi situs WordPress - ikon hilang

  2. Membuat baris tidak aktif di MySQL

  3. MySQL 8 Ekspresi Tabel Umum CTE

  4. Rekaman Aktif CodeIgniter - Pernyataan Grup ATAU

  5. bagaimana cara menghitung baris dengan huruf pertama?