Mysql資料庫中查詢重複資料和去重資料 , 刪除重複資料的sql及分析
阿新 • • 發佈:2019-02-15
資料庫中有重複資料時,用到哪些sql語句?
這裡有若干資料,並摻雜了重複資料
1. 檢視過濾重複後的資料
思路, group by 分組可以對多個列進行分組, 分組後可以過濾掉重複的資料
sql語句:
SELECT id,`name`,age,count(1)
FROM test GROUP BY `name`,age
2. 檢視重複的資料
剛剛的語句已經把每個組對應的count數查詢出來了,那麼count>1的自然是重複的資料
SELECT id,`name`,age,count(1) as c
FROM test GROUP BY `name`,age having c > 1
3. 刪除重複的資料留下一條
思路: 剛剛已經把重複的資料查詢出來了,包括id, 那麼查詢出每個重複組中的唯一一個id,也就是x,就可以delete … id not in (x)
子語句1:
SELECT MIN(id) FROM test
GROUP BY name,age
查詢出來的id就是我們需要留下的不重複的資料的id
按理來說只要:
delete from test where id not in 子語句1
DELETE FROM test
WHERE id NOT IN (
SELECT MIN(id) FROM test
GROUP BY name,age
)
但是報錯了
因為在mysql中,不能在一條Sql語句中,即查詢這些資料,同時修改這些資料
解決方法:select的結果再通過一箇中間表temp進行select多一次,就可以避免這個錯誤
DELETE FROM test
WHERE id NOT IN (
SELECT temp.min_id FROM (
SELECT MIN(id) min_id FROM test
GROUP BY name,age
)AS temp
}
刪除成功: