2015-05-28 283 views
0

我一直在試圖從表中刪除重複的行,但是我所有的努力要麼導致錯誤,要麼在執行過程中卡住。我的表格有1680萬條記錄,其中包括150萬個重複記錄。 表結構如下刪除重複的行MySQL

-------------------------------------- 
| id | number | city | region | site | 
-------------------------------------- 
| 1 | 12345 | abc | xyz | 321 | 
| 2 | 67890 | def | axc | 167 | 
| 3 | 12345 | abc | xyz | 321 | 
| 4 | 13400 | fff | aaa | 301 | 
-------------------------------------- 

我一直在使用一些答案在這裏堆棧溢出提出的方法的嘗試,但找不到任何爲我工作的解決方案。

DELETE n1 FROM data n1, data n2 WHERE n1.id > n2.id AND n1.number = n2.number 

沒有工作,所以我嘗試以下操作:

DELETE FROM data where data.number in 
(
    SELECT number from data GROUP BY number HAVING COUNT(*)>1 
) 
LIMIT 1 

沒有用在這裏無論是讓我堅持。歡迎各種建議。

這工作對我來說

馬克-B標出任stackoverflow.com/a/3312066/1528290重複嘗試這種方法和它的工作就像一個魅力的解決方案。 我的查詢語句:

alter ignore table data add unique i_number (number) 
+0

http://stackoverflow.com/questions/30401571/how-to-remove-duplicate-row-considering-the-arabic-phonetics/30402156#30402156 – Uueerdo

+0

@ B-阿巴斯。你是否希望刪除所有重複行的出現?或者你是否希望爲每一組重複行保留一行? – DfrDkn

+0

爲什麼'DELETE n1 FROM data n1,data n2 WHERE n1.id> n2.id AND n1.number = n2.number' not work?發生了什麼錯誤? – johnjps111

回答

0

假設重複是在number列完成。試試這個:

DELETE FROM data 
WHERE data.number NOT IN (SELECT * 
        FROM (SELECT MAX(data.id) 
          FROM data n 
         GROUP BY data.number) x) 

這將保留一條記錄(其中包含最高的數字)並刪除表中的其餘記錄。

編輯:

我只是檢查你的查詢和它的工作對我來說:

DELETE n1 FROM foobarred n1, foobarred n2 
WHERE n1.id > n2.id AND n1.number = n2.number; 

SQLFIDDLE DEMO

我想你應該遵循德魯的評論:對MySQL工作臺你有關閉數據庫,轉到編輯/首選項/ SQL編輯器/和@底部清除安全更新重新連接到服務器,選擇數據庫,並將其關閉上面的火炬

Marc-B將帖子標記爲stackoverflow.com/a/3312066/1528290的副本,並嘗試了這種方法,並且它的工作原理類似於魅力。 我的查詢語句:

alter ignore table data add unique i_number (number) 
+0

O是的我完全忘了寫這個,我試了一下,它刪除了表中的所有記錄。不知道爲什麼。 –

+0

重複行是對方的確切副本,除了是主鍵的ID –

+0

@ B-Abbasi: - 更新了我的答案。你現在可以試試嗎? –