Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Usuń duplikaty oparte na dwóch kolumnach i zachowaj wiersz, który ma minimalną wartość innej kolumny

Możesz użyć tego zapytania, aby usunąć wszystkie zduplikowane wpisy, pozostawiając najwcześniejszy:

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

Aktualizacja

Alternatywnym rozwiązaniem, które powinno być bardziej wydajne w przypadku naprawdę dużych tabel, jest utworzenie kopii przy użyciu UNIKALNEGO indeksu w wierszach, aby zapobiec wstawianiu duplikatów:

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;

Unikalny klucz znajduje się w kombinacji nazwy wykonawcy i nazwy utworu, dzięki czemu artyści mogą mieć różne utwory i różni artyści mieć tę samą nazwę utworu. Ponieważ SELECT część zapytania ma ORDER BY rok, najpierw wstawi kombinację (wykonawca, utwór, rok) z najniższym rokiem, a następnie inne identyczne rekordy (wykonawca, utwór) nie zostaną wstawione z powodu zduplikowanego klucza.

Demo na rextesterze




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql_num_rows() oczekuje, że parametr 1 będzie zasobem, podana wartość logiczna w

  2. Błąd składni SQL podczas wykonywania zapytania

  3. przepisz ?id=__ do tytułu strony przechowywanego w wierszu db

  4. Jak przeszukiwać tablicę JSON w MySQL?

  5. Jak sprawdzić poprawność pojedynczego pola wyboru za pomocą PHP i MySQL?