mysql如何查詢重復數(shù)據(jù)并刪除
mysql查詢重復數(shù)據(jù)并刪除
表名: articles
內容重復字段:title
準備過程
Navicate 數(shù)據(jù)表導出sql,將導出dsql導入到本地測試庫,查看title字段為varchar類型且沒有索引,本地庫title設置title字段普通索引
(未設置索引的情況下sql查詢耗時太久,等了一分鐘都沒出結果)
Navicate執(zhí)行操作過程
1. 查詢標題重復的數(shù)據(jù)量:
select count(*) from articles where title in (select title from articles group by title having count(*) > 1)
2. 查詢重復的數(shù)據(jù)量,排除主鍵id最小的重復記錄
select count(*) from articles where title in (select title from articles group by title having count(*) > 1) and id not in ( select min(id) from articles group by title having count(* )>1)
3. 查詢重復的數(shù)據(jù)的id,和 title
select id,title from articles where title in (select title from articles group by title having count(*) > 1) and id not in ( select min(id) from articles group by title having count(* )>1)
4. 查詢所有重復的記錄的id兵進行字符串拼接,排除主鍵id最小的重復記錄
select GROUP_CONCAT(id) from articles where title in (select title from articles group by title having count(*) > 1 ) and id not in ( select min(id) from articles group by title having count(* )>1 )
5. 將第4步查詢出來的重復數(shù)據(jù)id拼接的字符串作為條件進行數(shù)據(jù)刪除
delete from articles where id in (第4步查詢出的id字符串)
6. 檢查本地測試庫中article表內重復數(shù)據(jù)已被刪除,將第5步的sql在線上執(zhí)行。第四步和第五步要多次執(zhí),因為GROUP_CONCAT 一次拼接的id 是有限的,可能沒有全部拼接出來
方法二:
該方法 title字段必須加索引,加索引的情況下,7W條數(shù)據(jù)刪除8K條執(zhí)行了49秒
DELETE FROM 表名稱 WHERE 重復字段名 IN ( SELECT tmpa.重復字段名 FROM ( SELECT 重復字段名 FROM 表名稱 GROUP BY 重復字段名 HAVING count(1) > 1 ) tmpa ) AND id NOT IN ( SELECT tmpb.minid FROM ( SELECT min(id) AS minid FROM 表名稱 GROUP BY 重復字段名 HAVING count(1) > 1 ) tmpb )
總結
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
MySQL查詢數(shù)據(jù)庫所有表名以及表結構其注釋(小白專用)
查詢數(shù)據(jù)庫所有表的表名、備注,其實也是比較常見的操作,這篇文章主要給大家介紹了關于MySQL查詢數(shù)據(jù)庫所有表名以及表結構其注釋的相關資料,文中通過圖文介紹的非常詳細,需要的朋友可以參考下2024-08-08MySQL關于ERROR 1290 (HY000)報錯解決方法
在本篇文章里小編給大家整理的是關于MySQL關于ERROR 1290 (HY000)報錯的解決方法,有興趣的朋友們可以參考下。2019-09-09通過存儲過程動態(tài)創(chuàng)建MySQL對象的流程步驟
在當今數(shù)據(jù)驅動的世界中,高效的數(shù)據(jù)庫管理至關重要,本文將展示如何通過存儲過程自動化地創(chuàng)建各種?MySQL?數(shù)據(jù)庫對象,通過這些方法,我們可以快速響應業(yè)務需求,提高數(shù)據(jù)庫管理的靈活性和效率,需要的朋友可以參考下2024-10-10MySQL快速插入大量數(shù)據(jù)的解決方案和代碼示例
在這篇博客中,我們將深入探討如何高效插入大量數(shù)據(jù)到MySQL數(shù)據(jù)庫,無論你是數(shù)據(jù)庫新手還是經(jīng)驗豐富的開發(fā)者,這篇文章都將為你提供實用的解決方案和代碼示例,幫助你解決插入3萬條數(shù)據(jù)需要20多秒的問題,需要的朋友可以參考下2024-08-08