MySQL去重的方法整理
MySQL去重的方法整理
【初級(jí)】有極少的重復(fù)行
使用distinct查出來(lái),然后手動(dòng)一行一行刪除。
【中級(jí)】按照單個(gè)字段的重復(fù)去重
例如:對(duì)id字段去重
使用方法:獲取id的重復(fù)字段的值,利用相同id字段所在的行中,比較出數(shù)據(jù)不同的字段,刪除 除了最?。ɑ蜃畲螅┑淖侄嗡诘脑撔兄獾乃兄貜?fù)的行。一般使用主鍵來(lái)比較,因?yàn)橹麈I的值一定是唯一值,絕對(duì)不相同。
id name 1 a 1 b 2 c 2 a 3 c
結(jié)果:
id name 1 a 2 a
操作:
delete from a_tmp where id in (select * from (select b.id from a_tmp b group by b.id having count(b.id) >1) bb) and name not in (select * from (select min(a.name) from a_tmp a GROUP BY a.id having count(a.id) >1) aa);
注意:
上述加粗并綠色的字,必須加別名,必須使用select * from (……)這樣的格式,否則會(huì)報(bào)錯(cuò):
[Err] 1093 - You can't specify target table 'a_tmp' for update in FROM clause
【高級(jí)】按多個(gè)字段的重復(fù)來(lái)去重
例如:對(duì)id,name相同的去重,即:對(duì)id,name都相同的算作重復(fù)行,對(duì)id相同而name不同的算作不重復(fù)行
使用方法:和單個(gè)字段相似,一般使用主鍵來(lái)比較,因?yàn)橹麈I的值一定是唯一值。
id name rowid 1 a 1 1 a 2 1 b 3 2 b 4 2 b 5 3 c 6 3 d 7
結(jié)果:
id name rowid 1 a 1 1 b 3 2 b 4 3 c 6 3 d 7
操作:
第一種:
delete from a_tmp where (id,name) in (select * from (select b.id,b.name from a_tmp b group by b.id,b.name having count(b.id) >1) bb) and rowid not in (select * from (select min(a.rowid) from a_tmp a group by a.id,a.name having count(a.id) >1) aa);
第二種:
將id和name字段的值連接起來(lái)插入到臨時(shí)表中b_tmp,這樣便可以使用【中級(jí)】的單字段的判斷刪除方法。
#將兩字段連接的值,a_tmp表中唯一值的字段插入b_tmp表
insert into b_tmp select concat(id,name),rowid from a_tmp; #查出需要留下來(lái)的行 select id_name,max(rowid) from b_tmp group by id_name having count(id_name)>1; #使用【中級(jí)】的方法,或存儲(chǔ)過(guò)程完成去重的工作
【終極】每行都有兩份一樣的數(shù)據(jù)
例如:
使用方法:對(duì)于整行的數(shù)據(jù)都一樣,是沒(méi)辦法使用SQL語(yǔ)句刪除的,因?yàn)闆](méi)有可以使用的條件限制來(lái)留下一行刪除所有與其相同的行。沒(méi)有不同的字段可以自己創(chuàng)造不同的字段,即:添加一個(gè)字段,設(shè)為自增長(zhǎng),并設(shè)為主鍵,它會(huì)自動(dòng)添加上值。
id name 1 a 1 a 1 b 1 b 2 c 2 c 3 c 3 c
結(jié)果:
id name rowid 1 a 1 1 b 3 2 c 5 3 c 7
操作:
添加一個(gè)自增長(zhǎng)的字段,并暫時(shí)設(shè)為主鍵。
使用上面【中級(jí)】和【高級(jí)】的方法操作。
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
10個(gè)MySQL性能調(diào)優(yōu)的方法
本文介紹了10個(gè)MySQL性能調(diào)優(yōu)的方法,每個(gè)方法的講解都很細(xì)致,非常實(shí)用,,需要的朋友可以參考下2015-07-07MySQL數(shù)據(jù)xtrabackup物理備份的方式
Xtrabackup是開源免費(fèi)的支持MySQL 數(shù)據(jù)庫(kù)熱備份的軟件,在 Xtrabackup 包中主要有 Xtrabackup 和 innobackupex 兩個(gè)工具,本文給大家介紹MySQL數(shù)據(jù)xtrabackup物理備份方法,感興趣的朋友跟隨小編一起看看吧2023-10-10使用dreamhost空間實(shí)現(xiàn)MYSQL數(shù)據(jù)庫(kù)備份方法
使用dreamhost空間實(shí)現(xiàn)MYSQL數(shù)據(jù)庫(kù)備份方法...2007-07-07MySQL中使用or、in與union all在查詢命令下的效率對(duì)比
這篇文章主要介紹了MySQL中使用or、in與union all在查詢命令下的效率對(duì)比,論證了在通常情況下union all并不一定比or及in更快,需要的朋友可以參考下2015-11-11對(duì)MySQL子查詢的簡(jiǎn)單改寫優(yōu)化
這篇文章主要介紹了對(duì)MySQL子查詢的簡(jiǎn)單改寫優(yōu)化,文中的小修改主要將子查詢改為關(guān)聯(lián)從而降低查詢時(shí)關(guān)聯(lián)的次數(shù),需要的朋友可以參考下2015-05-05MySQL時(shí)間格式化date_format使用語(yǔ)法
這篇文章主要為大家介紹了MySQL時(shí)間格式化date_format使用語(yǔ)法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05