2012-10-31 232 views
2

可能重複:
Remove duplicate rows in MySQL從表中刪除重複的行

我想在一個巨大的表上創建單一屬性的唯一指標,但也有duplicite值,因此我需要刪除重複。只有重複記錄可以被刪除。 phpmyadmin或mysql查詢中的最佳解決方案是做什麼的?

我想出的唯一解決方法是使select進入另一個表,但我更願意從原始表中刪除數據。

表看起來像這樣(我喜歡把唯一索引id

|id|... 
+--+--- 
| 1|x 
| 2|a <-- duplicity 
| 2|b <-- duplicity 
| 3|c 
| 4|d 

這將是最好的結果

|id|... 
+--+--- 
| 1|x 
| 2|a 
| 3|c 
| 4|d 

這也是可以接受的結果

|id|... 
+--+--- 
| 1|x 
| 3|c 
| 4|d 
+0

如果我沒有記錯,剛剛創造了'UNIQUE'指數將刪除重複。如果不是,只需創建一個臨時表,它將會'INSERT ... SELECT DISTINCT id ...' – Kermit

+0

爲什麼'(2,a)'比'(2,b)'更可取? – eggyal

+0

@eggyal:'2,a'不比'2,b'更可取,但其中一個必須去,我不在乎哪一個。 @njk:試圖創建唯一的索引結果的錯誤 –

回答

4
ALTER IGNORE TABLE my_table ADD UNIQUE INDEX (id); 
+0

偉大工程,10.000行立即刪除,謝謝! –

+0

找到答案後,我可以確認第一項(最小ID)將被保留:http://stackoverflow.com/questions/5456520/mysql-alter-ignore-table-add-unique-what-will-被截斷 – gordie

1
DELETE a 
FROM tableName a 
     LEFT JOIN 
      (
       SELECT id, min(colName) x 
       FROM tableName 
       GROUP BY id 
      ) c 
     ON a.id = c.id AND 
      a.colName = c.x 
WHERE c.id IS NULL; 
1
DELETE FROM table 
WHERE id IN 
    (SELECT id FROM table, (SELECT id, count(*) dNum FROM table GROUP BY id) x 
    WHERE id = x.id  
    ORDER BY id DESC LIMIT dNum-1)