2008-10-31 44 views
2

在表中,我有三列 - id,name和count。很多名稱列是相同的(由於缺乏UNIQUE早),我想解決這個問題。但是,id列被其他人(4或5,我認爲 - 我將檢查文檔)表使用以查找名稱,只是刪除它們會破壞事情。那麼有沒有一種很好,乾淨的方式說「找到所有相同的記錄並將它們合併在一起」?有沒有一種乾淨的方式來清理MySQL中的重複條目?

回答

4

這類問題的出現,不時。不,沒有一個非常乾淨的方法來做到這一點。您必須更改子表中取決於父表中不需要的值的所有行,然後才能消除父表中不需要的行。

MySQL支持多表UPDATEDELETE報表(不像其他品牌的數據庫),所以你可以做一些非常巧妙的技巧如下所示:

UPDATE names n1 
    JOIN names n2 ON (n1.id < n2.id AND n1.name = n2.name) 
    JOIN child_table c ON (n2.id = c.id) 
SET c.name_id = n1.id 
ORDER BY n1.id DESC; 

一旦你做到了這一點對所有的子表(s),可以使用MySQL的多表DELETE語法刪除父表中不需要的行:

DELETE FROM n2 
    USING names n1 JOIN names n2 ON (n1.id < n2.id AND n1.name = n2.name); 
0

爲什麼你不能這樣做

update dependent_table set name_id = <id you want to keep> where name_id in (
    select id from names where name = 'foo' and id != <id you want to keep>) 
相關問題