mysql类似于excel的删除重复项_删除重复数据 excel去除重复数据 怎么筛选重复数据 excel重复数据合并...
本篇文章主要介紹了"刪除重復數據",主要涉及到重復數據方面的內容,對于MySql感興趣的同學可以參考一下: 最近因為發現數據庫中的表有臟數據,需要維護。這些臟數據就是重復數據,需要將其刪除。可能因為你在建表的時候考慮欠佳,需要為表里面的幾個字段建立一個(聯合)唯一索引...
最近因為發現數據庫中的表有臟數據,需要維護。這些臟數據就是重復數據,需要將其刪除。
可能因為你在建表的時候考慮欠佳,需要為表里面的幾個字段建立一個(聯合)唯一索引,但是沒有建立,而由于不止一個寫的程序在往表里面insert數據,造成數據的重復~~
現在需要刪除這些重復數據,看了看網上前輩們寫的例子,大多數不能用,rowid也出來了,而mysql中是沒有rowid的。
現假設有一張t_test表,主鍵字段為id,還有date,time,cnt1,cnt,cnt3三個字段。假設date,time組合起來規定只能有一條記錄(即需要為date,time建立聯合唯一索引)。表中數據如下:
可以看出:表中數據明顯有不滿足條件的重復數據。
我們先查詢出有哪些重復數據(按date, time兩個字段):SELECT * FROM t_test WHERE (DATE, TIME) IN(SELECT DATE,TIME FROM t_test GROUP BY DATE, TIME HAVING COUNT(1)>1);
結果如下:
嘗試使用網上的方法刪除:DELETE FROM t_test a WHERE (a.date, a.time) IN(SELECT DATE,TIME FROM t_test GROUP BY DATE, TIME HAVING COUNT(1)>1)AND rowid NOT IN(SELECT MIN(rowid) FROM t_test GROUP BY DATE, TIME HAVING COUNT(1)>1)
根本行不通,因為rowid在MySQL里面是不存在的,這不同于Oracle。。
還需注意的一點是:mysql中不支持在delete語句里使用表別名,所以無法進行自連接來刪除表中的記錄!
解決方法:使用一個中間臨時表過渡~~
首先,建立一個臨時表如下:CREATE TEMPORARY TABLE tmp AS SELECT MIN(id) FROM t_test GROUP BY DATE,TIME
查看臨時表tmp的內容:SELECT * FROM tmp
得到:
這張臨時表記錄了重復記錄里id最小的主鍵,以及沒有重復記錄的主鍵信息。
接下來,刪除不在里面的記錄即可:DELETE FROM t_test WHERE id NOT IN(SELECT * FROM tmp)
檢查下現在的記錄:SELECT * FROM t_test
發現:
發現,記錄終于“干凈”了。。重復性的記錄被成功刪除了!
當然比較保險的做法是建表時期就給date和time字段加上一個聯合索引。或者刪除重復記錄之后再alter table加上一個聯合索引即可。
以上就介紹了刪除重復數據,包括了重復數據方面的內容,希望對MySql有興趣的朋友有所幫助。
總結
以上是生活随笔為你收集整理的mysql类似于excel的删除重复项_删除重复数据 excel去除重复数据 怎么筛选重复数据 excel重复数据合并...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux mencoder 安装,Me
- 下一篇: 关于网站mdb数据库管理员MD5密码解密