mysql类似于excel的删除重复项_删除重复数据 excel去除重复数据 怎么筛选重复数据 excel重复数据合并...
本篇文章主要介紹了"刪除重復數(shù)據(jù)",主要涉及到重復數(shù)據(jù)方面的內容,對于MySql感興趣的同學可以參考一下: 最近因為發(fā)現(xiàn)數(shù)據(jù)庫中的表有臟數(shù)據(jù),需要維護。這些臟數(shù)據(jù)就是重復數(shù)據(jù),需要將其刪除。可能因為你在建表的時候考慮欠佳,需要為表里面的幾個字段建立一個(聯(lián)合)唯一索引...
最近因為發(fā)現(xiàn)數(shù)據(jù)庫中的表有臟數(shù)據(jù),需要維護。這些臟數(shù)據(jù)就是重復數(shù)據(jù),需要將其刪除。
可能因為你在建表的時候考慮欠佳,需要為表里面的幾個字段建立一個(聯(lián)合)唯一索引,但是沒有建立,而由于不止一個寫的程序在往表里面insert數(shù)據(jù),造成數(shù)據(jù)的重復~~
現(xiàn)在需要刪除這些重復數(shù)據(jù),看了看網上前輩們寫的例子,大多數(shù)不能用,rowid也出來了,而mysql中是沒有rowid的。
現(xiàn)假設有一張t_test表,主鍵字段為id,還有date,time,cnt1,cnt,cnt3三個字段。假設date,time組合起來規(guī)定只能有一條記錄(即需要為date,time建立聯(lián)合唯一索引)。表中數(shù)據(jù)如下:
可以看出:表中數(shù)據(jù)明顯有不滿足條件的重復數(shù)據(jù)。
我們先查詢出有哪些重復數(shù)據(jù)(按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)
檢查下現(xiàn)在的記錄:SELECT * FROM t_test
發(fā)現(xiàn):
發(fā)現(xiàn),記錄終于“干凈”了。。重復性的記錄被成功刪除了!
當然比較保險的做法是建表時期就給date和time字段加上一個聯(lián)合索引。或者刪除重復記錄之后再alter table加上一個聯(lián)合索引即可。
以上就介紹了刪除重復數(shù)據(jù),包括了重復數(shù)據(jù)方面的內容,希望對MySql有興趣的朋友有所幫助。
總結
以上是生活随笔為你收集整理的mysql类似于excel的删除重复项_删除重复数据 excel去除重复数据 怎么筛选重复数据 excel重复数据合并...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux mencoder 安装,Me
- 下一篇: Java中,反射机制-Reflected