共計 2181 個字符,預計需要花費 6 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
MySQL 中怎么刪除重復的記錄,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
1、查找全部重復記錄
select * from 表 where 重復字段 in (select 重復字段 from 表 group by 重復字段 having count(*) 1)
2、過濾重復記錄(只顯示一條)
select * from HZT Where ID In (select max(ID) from HZT group by Title)
注:此處顯示 ID 最大一條記錄。
刪除重復記錄
1、刪除全部重復記錄(慎用)
delete 表 where 重復字段 in (select 重復字段 from 表 group by 重復字段 having count(*) 1)
2、保留一條(這個應該是大多數人所需要的 ^_^)
delete HZT where ID not In (select max(ID) from HZT group by Title)
注:此處保留 ID 最大一條記錄。
三、舉例
1、查找表中多余的重復記錄,重復記錄是根據單個字段 (peopleId) 來判斷
select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) 1)
2、刪除表中多余的重復記錄,重復記錄是根據單個字段 (peopleId) 來判斷,只留有 rowid 最小的記錄
delete from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId ) 1)
3、查找表中多余的重復記錄(多個字段)
select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)
4、刪除表中多余的重復記錄(多個字段),只留有 rowid 最小的記錄
delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*) 1)
5、查找表中多余的重復記錄(多個字段),不包含 rowid 最小的記錄
select * from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*) 1)
四、補充
有兩個以上的重復記錄,一是完全重復的記錄,也即所有字段均重復的記錄,二是部分關鍵字段重復的記錄,比如 Name 字段重復,而其他字段不一定重復或都重復可以忽略。
1、對于第一種重復,比較容易解決,使用
select distinct * from tableName
就可以得到無重復記錄的結果集。
如果該表需要刪除重復的記錄(重復記錄保留 1 條),可以按以下方法刪除
select distinct * into #Tmp from tableName drop table tableName select * into tableName from #Tmp drop table #Tmp
發生這種重復的原因是表設計不周產生的,增加唯一索引列即可解決。
2、這類重復問題通常要求保留重復記錄中的第一條記錄,操作方法如下。
假設有重復的字段為 Name,Address,要求得到這兩個字段唯一的結果集
select identity(int,1,1) as autoID, * into #Tmp from tableName select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID select * from #Tmp where autoID in(select autoID from #tmp2)
看完上述內容,你們掌握 MySQL 中怎么刪除重復的記錄的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注丸趣 TV 行業資訊頻道,感謝各位的閱讀!
向 AI 問一下細節