このクエリを使用して、重複するすべてのエントリを削除し、最初のエントリを残すことができます:
DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
更新
非常に大きなテーブルに対してより効率的であるはずの代替ソリューションは、重複挿入を防ぐために行にUNIQUEインデックスを使用してコピーを作成することです。
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;
一意のキーは組み合わせにあります アーティスト名とトラック名の違いにより、アーティストは異なるトラックを持ち、異なるアーティストは同じトラック名を持つことができます。 SELECT
クエリの一部にORDER BY
があります 年、それは最初に最も低い年との(artist、track、year)の組み合わせを挿入し、次に他の同一の(artist、track)レコードは重複したキーのために挿入されません。