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
idhodnota:DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name -
Pokud chcete zachovat řádek s nejvyšším
idhodnota: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;