Upozornění editora:Toto řešení je výpočetně neefektivní a může způsobit výpadek připojení u velkého stolu.
Poznámka – potřebujete to nejprve na zkušební kopii vašeho stolu!
Když jsem to udělal, zjistil jsem, že pokud jsem nezahrnul také AND n1.id <> n2.id
, smazal každý řádek v tabulce.
-
Pokud chcete zachovat řádek s nejnižším
id
hodnota:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name
-
Pokud chcete zachovat řádek s nejvyšším
id
hodnota:DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name
Tuto metodu jsem použil v MySQL 5.1
U jiných verzí si nejsem jistý.
Aktualizace:Protože lidé, kteří pomocí Googlu odebírají duplikáty, končí zde
Přestože otázka OP se týká DELETE
, mějte na paměti, že pomocí INSERT
a DISTINCT
je mnohem rychlejší. U databáze s 8 miliony řádků trval níže uvedený dotaz 13 minut při použití DELETE
, trvalo to více než 2 hodiny a přesto nebylo dokončeno.
INSERT INTO tempTableName(cellId,attributeId,entityRowId,value)
SELECT DISTINCT cellId,attributeId,entityRowId,value
FROM tableName;