MySQL 刪除數(shù)據(jù)庫(kù)中重復(fù)數(shù)據(jù)方法小結(jié)
剛開(kāi)始,根據(jù)我的想法,這個(gè)很簡(jiǎn)單嘛,上sql語(yǔ)句
delete from zqzrdp where tel in (select min(dpxx_id) from zqzrdp group by tel having count(tel)>1);
執(zhí)行,報(bào)錯(cuò)??!~!~

異常意為:你不能指定目標(biāo)表的更新在FROM子句。傻了,MySQL 這樣寫(xiě),不行,讓人郁悶。
難倒只能分步操作,蛋疼
以下是網(wǎng)友寫(xiě)的,同樣是坑爹的代碼,我機(jī)器上運(yùn)行不了。
1. 查詢(xún)需要?jiǎng)h除的記錄,會(huì)保留一條記錄。
select a.id,a.subject,a.RECEIVER from test1 a left join (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b on a.id< b.bid where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid
2. 刪除重復(fù)記錄,只保留一條記錄。注意,subject,RECEIVER 要索引,否則會(huì)很慢的。
delete a from test1 a, (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid;
3. 查找表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來(lái)判斷
select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
4. 刪除表中多余的重復(fù)記錄,重復(fù)記錄是根據(jù)單個(gè)字段(peopleId)來(lái)判斷,只留有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)
5.刪除表中多余的重復(fù)記錄(多個(gè)字段),只留有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)
看來(lái)想偷懶使用一句命令完成這個(gè)事好像不太顯示,還是老老實(shí)實(shí)的分步處理吧,思路先建立復(fù)制一個(gè)臨時(shí)表,然后對(duì)比臨時(shí)表內(nèi)的數(shù)據(jù),刪除主表里的數(shù)據(jù)
alter table tableName add autoID int auto_increment not null; create table tmp select min(autoID) as autoID from tableName group by Name,Address; create table tmp2 select tableName.* from tableName,tmp where tableName.autoID = tmp.autoID; drop table tableName; rename table tmp2 to tableName;
- mysql 數(shù)據(jù)表中查找重復(fù)記錄
- MySQL查詢(xún)重復(fù)數(shù)據(jù)(刪除重復(fù)數(shù)據(jù)保留id最小的一條為唯一數(shù)據(jù))
- 很全面的MySQL處理重復(fù)數(shù)據(jù)代碼
- MySQL數(shù)據(jù)庫(kù)中刪除重復(fù)記錄的方法總結(jié)[推薦]
- 有效查詢(xún)MySQL表中重復(fù)數(shù)據(jù)的方法和技巧分享
- MySQL 去除重復(fù)數(shù)據(jù)實(shí)例詳解
- 刪除MySQL重復(fù)數(shù)據(jù)的方法
- MySQL中刪除重復(fù)數(shù)據(jù)的簡(jiǎn)單方法
- MYSQL刪除重復(fù)數(shù)據(jù)的簡(jiǎn)單方法
- MySQL處理重復(fù)數(shù)據(jù)完整代碼實(shí)例
相關(guān)文章
MySQL數(shù)據(jù)庫(kù)的多種連接方式以及實(shí)用工具
mysql連接操作是客戶(hù)端進(jìn)程與mysql數(shù)據(jù)庫(kù)實(shí)例進(jìn)程進(jìn)行通信,下面這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)庫(kù)的多種連接方式以及實(shí)用工具的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02
mysql5.7的安裝及Navicate長(zhǎng)久免費(fèi)使用的實(shí)現(xiàn)過(guò)程
這篇文章主要介紹了mysql5.7的安裝及Navicate長(zhǎng)久免費(fèi)使用的實(shí)現(xiàn)過(guò)程,本文給大家分享問(wèn)題及解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-11-11
Mysql row number()排序函數(shù)的用法和注意
這篇文章主要介紹了Mysql row number()排序函數(shù)的用法和注意 的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
MySQL學(xué)習(xí)第五天 MySQL數(shù)據(jù)庫(kù)基本操作
MySQL學(xué)習(xí)第五天我們將針對(duì)MySQL數(shù)據(jù)庫(kù)進(jìn)行基本操作,創(chuàng)建、修改、刪除數(shù)據(jù)庫(kù)等一系列操作進(jìn)行學(xué)習(xí),感興趣的小伙伴們可以參考一下2016-05-05
基于mysql replication的問(wèn)題總結(jié)
本篇文章是對(duì)mysql中replication的問(wèn)題進(jìn)行了詳細(xì)分析介紹,需要的朋友參考下2013-06-06
MySQL單表百萬(wàn)數(shù)據(jù)記錄分頁(yè)性能優(yōu)化技巧
自己的一個(gè)網(wǎng)站,由于單表的數(shù)據(jù)記錄高達(dá)了一百萬(wàn)條,造成數(shù)據(jù)訪問(wèn)很慢,Google分析的后臺(tái)經(jīng)常報(bào)告超時(shí),尤其是頁(yè)碼大的頁(yè)面更是慢的不行2016-08-08
MySQL的數(shù)據(jù)類(lèi)型和建庫(kù)策略分析詳解
無(wú)論是在小得可憐的免費(fèi)數(shù)據(jù)庫(kù)空間或是大型電子商務(wù)網(wǎng)站,合理的設(shè)計(jì)表結(jié)構(gòu)、充分利用空間是十分必要的。這就要求我們對(duì)數(shù)據(jù)庫(kù)系統(tǒng)的常用數(shù)據(jù)類(lèi)型有充分的認(rèn)識(shí)。下面我就將我的一點(diǎn)心得寫(xiě)出來(lái)跟大家分享。2008-04-04

