Udělal bych to následujícím způsobem:
-
Vytvořte dočasnou tabulku ze stávající tabulky:
CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
-
Naplňte dočasnou tabulku pouze požadovanými záznamy:
INSERT INTO data_to_keep SELECT DISTINCT * FROM table_with_dupes_in_it
-
Vyprázdněte stůl
TRUNCATE TABLE table_with_dupes_in_it
-
Vraťte data z dočasné tabulky do původní tabulky
INSERT INTO table_with_dupes_in_it SELECT * FROM data_to_keep;
-
Vyčistit
DROP TEMPORARY TABLE data_to_keep
Uvědomte si, že to může zabrat obrovské množství paměti a/nebo úložiště, pokud je daný stůl velký. Pokud se jedná o velký stůl, přikláněl bych se k použití skutečného stolu místo dočasného, abych nezabíral nadměrné množství paměti na vašem DB serveru.
UPRAVIT A PŘIDAT:
Pokud se jen obáváte částečných chyb (řádky, kde pouze některá data jsou identická s dříve zadanými daty), budete chtít použít GROUP BY. Když použijete GROUP BY, můžete omezit MySQL tak, aby vrátila pouze jeden řádek, který obsahuje daná data namísto všech.
SELECT *
FROM table
GROUP BY column_name
Měli byste také zvážit použití UNIQUE indexů ve sloupcích, ve kterých nechcete uchovávat duplicitní data, zabráníte tím uživatelům vkládat duplicitní data.