Mysql如何去掉數(shù)據(jù)庫中的重復(fù)記錄?
網(wǎng)友解答: 從mysql數(shù)據(jù)庫刪除重復(fù)記錄只保留其中一條這兩天做了一個(gè)調(diào)用第三方接口的小程序,因?yàn)槭菍?shí)時(shí)更新數(shù)據(jù),所以請(qǐng)求接口的頻率就很高,這樣有時(shí)會(huì)出現(xiàn)往數(shù)據(jù)庫插入重復(fù)的數(shù)據(jù),對(duì)數(shù)據(jù)庫
從mysql數(shù)據(jù)庫刪除重復(fù)記錄只保留其中一條
這兩天做了一個(gè)調(diào)用第三方接口的小程序,因?yàn)槭菍?shí)時(shí)更新數(shù)據(jù),所以請(qǐng)求接口的頻率就很高,這樣有時(shí)會(huì)出現(xiàn)往數(shù)據(jù)庫插入重復(fù)的數(shù)據(jù),對(duì)數(shù)據(jù)庫造成壓力也不方便管理,因?yàn)橐ㄟ^原生sql語句,解決數(shù)據(jù)庫的去重問題.在過程中遇到了麻煩,最終解決了分享出來。
要?jiǎng)h除重復(fù)的記錄,就要先查出重復(fù)的記錄,這個(gè)很容易做到
select * from cqssc group by expect having count(expect) 1
注意:這是查出所有重復(fù)記錄的第一條記錄,需要保留,因此需要添加查詢條件,查出這三條的重復(fù)記錄
select id,expect from cqssc where expect in (select expect from cqssc group by expect having count(expect)1)
and id not in(select min(id) from cqssc group by expect having count(expect)1)
以上得到的結(jié)果就是我們需要?jiǎng)h除的記錄!
下面是我最初做錯(cuò)的地方,既然要?jiǎng)h除,可能都會(huì)想到這樣很簡(jiǎn)單了
報(bào)錯(cuò)了!?。≡贛ysql中是不能刪除查詢出來的記錄的,這里很容易錯(cuò),當(dāng)時(shí)在這里糾結(jié)了很久,而是要通過一張臨時(shí)表來解決。
delete from cqssc where id in (select id from (select id from cqssc where expect in
(select expect from cqssc group by expect having count(expect)1) and id not in
(select min(id) from cqssc group by expect having count(expect)1)) as tmpresult)
再運(yùn)行試試
刪除成功,最后再查詢一下看是否還有重復(fù)記錄