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

MySql:usunąć wiersze tabeli w zależności od zduplikowanych wartości kolumn?

Myślę, że możesz po prostu spróbować dodać UNIKALNY INDEX za pomocą IGNORE:

ALTER IGNORE TABLE `table` ADD UNIQUE INDEX `name` (`column`);

MySQL powinien odpowiedzieć w następujący sposób:

Query OK, 4524 rows affected (1.09 sec)
Records: 4524 Duplicates: 9342 Warnings: 0

Oczywiście decyzję, które wiersze mają zostać usunięte, pozostawisz MySQL.

EDYCJA:

działa to dla dowolnej liczby kolumn:

ALTER IGNORE TABLE `table` ADD UNIQUE INDEX `name` (`col1`, `col2`, `col3`);

sprawdź dokumentację MySQL na UTWÓRZ INDEKS . Częstą pułapką (przynajmniej raz na którą natknąłem się) jest zapomnienie, że NULL = NULL nie jest prawdziwe (ale NULL ), stąd {42, NULL} i {42, NULL} są dozwolone dla indeksu UNIQUE w dwóch kolumnach.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmniejsz wartość w mysql, ale nie ujemną

  2. Cronjob co minutę

  3. problem z serializacją

  4. CURDATE() Przykłady – MySQL

  5. Używanie DISTINCT i COUNT razem w zapytaniu MySQL