Можете да използвате тази заявка, за да изтриете всички дублиращи се записи, като оставите най-ранния:
DELETE d
FROM discog d
JOIN discog d1 ON d1.artist = d.artist AND d1.track = d.track AND d1.year < d.year;
Актуализация
Алтернативно решение, което трябва да е по-ефективно за наистина големи таблици, е да се създаде копие, като се използва УНИКАЛЕН индекс на редовете, за да се предотврати дублиране на вмъкване:
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
година, първо ще вмъкне комбинацията (изпълнител, песен, година) с най-ниската година и след това други идентични записи (изпълнител, песен) няма да бъдат вмъкнати поради дублиращия се ключ.