Zrobiłbym to w następujący sposób:
-
Utwórz tabelę tymczasową z istniejącej tabeli:
CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
-
Wypełnij tabelę tymczasową tylko tymi rekordami, które chcesz:
INSERT INTO data_to_keep SELECT DISTINCT * FROM table_with_dupes_in_it
-
Opróżnij stół
TRUNCATE TABLE table_with_dupes_in_it
-
Zwróć dane z tabeli tymczasowej do oryginalnej tabeli
INSERT INTO table_with_dupes_in_it SELECT * FROM data_to_keep;
-
Posprzątaj
DROP TEMPORARY TABLE data_to_keep
Pamiętaj, że może to pochłonąć ogromną ilość pamięci i/lub pamięci, jeśli dany stół jest duży. Jeśli jest to duży stół, byłbym skłonny użyć prawdziwej tabeli zamiast tabeli tymczasowej, aby nie zużywać nadmiernej ilości pamięci na serwerze DB.
EDYCJA, ABY DODAĆ:
Jeśli martwisz się tylko częściowymi duplikatami (wiersze, w których tylko niektóre dane są identyczne z wcześniej wprowadzonymi danymi), to będziesz chciał użyć GROUP BY. Używając GROUP BY, możesz ograniczyć MySQL do zwracania tylko jednego wiersza zawierającego dane, a nie wszystkich.
SELECT *
FROM table
GROUP BY column_name
Powinieneś również rozważyć użycie indeksów UNIQUE w kolumnach, w których nie chcesz przechowywać zduplikowanych danych, co w pierwszej kolejności uniemożliwi użytkownikom wstawianie zduplikowanych danych.