Mysql資料庫刪除重複資料
阿新 • • 發佈:2018-12-18
最近因為發現數據庫中的表有髒資料,需要維護。這些髒資料就是重複資料,需要將其刪除。
現假設有一張test表,主鍵欄位為num,還有id,one,two三個欄位。假設id規定只能有一條記錄(即需要為id建立聯合唯一索引)。表中資料如下:
可以看出:表中資料明顯有不滿足條件的重複資料。
解決方法:使用一箇中間臨時表過渡~~
先檢視需要保留的記錄的id
先檢視重複記錄的最小id
SELECT id from test where id in (SELECT MIN(id) from test GROUP BY id having count(id )>1)
再檢視沒有重複的記錄id
SELECT id from test GROUP BY id having count(id)=1
首先,建立一個臨時表如下:
Sql程式碼- CREATE TABLE tmp AS select id from test where id not in (SELECT id from test where id in (SELECT MIN(id) from test GROUP BY id having count(id )>1) or id in(SELECT MIN(id) from test GROUP BY id having count(id)=1))
這張臨時表記錄了重複記錄裡所有需要刪除的id。
接下來,刪除不在裡面的記錄即可:
Sql程式碼- DELETE FROM test WHERE id NOT IN(SELECT * FROM tmp
檢查下現在的記錄:
發現,記錄終於“乾淨”了。。重複性的記錄被成功刪除了!