{eval=Array;=+count(Array);}
很簡單 通過id刪除
DELETE
FROM
table_name AS ta
WHERE
ta.唯一鍵 <> (
SELECT
t.maxid
FROM
( SELECT max( tb.唯一鍵 ) AS maxid FROM table_name AS tb WHERE ta.判斷重復的列 = tb.判斷重復的列 ) t
);
從mysql數據庫刪除重復記錄只保留其中一條
這兩天做了一個調用第三方接口的小程序,因為是實時更新數據,所以請求接口的頻率就很高,這樣有時會出現往數據庫插入重復的數據,對數據庫造成壓力也不方便管理,因為要通過原生sql語句,解決數據庫的去重問題.在過程中遇到了麻煩,最終解決了分享出來。
要刪除重復的記錄,就要先查出重復的記錄,這個很容易做到
select * from cqssc group by expect having count(expect) > 1
注意:這是查出所有重復記錄的第一條記錄,需要保留,因此需要添加查詢條件,查出這三條的重復記錄
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)
以上得到的結果就是我們需要刪除的記錄!
下面是我最初做錯的地方,既然要刪除,可能都會想到這樣很簡單了
報錯了?。?!在Mysql中是不能刪除查詢出來的記錄的,這里很容易錯,當時在這里糾結了很久,而是要通過一張臨時表來解決。
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)
再運行試試
刪除成功,最后再查詢一下看是否還有重復記錄
可以戳原文看看:https://www.cnblogs.com/jdbeyond/p/8157224.html
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答