mysql去重的方法
發(fā)表時間:2023-08-24 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]這篇文章主要介紹了MySQL去重的方法整理的相關(guān)資料,需要的朋友可以參考下MySQL去重的方法整理【初級】有極少的重復(fù)行使用distinct查出來,然后手動一行一行刪除。【中級】按照單個字段的重復(fù)去重例如:對id字段去重使用方法:獲取id的重復(fù)字段的值,利用相同id字段所在的行中,比較出數(shù)據(jù)不同的...
這篇文章主要介紹了
MySQL去重的方法整理的相關(guān)資料,需要的朋友可以參考下
MySQL去重的方法整理
【初級】有極少的重復(fù)行
使用distinct查出來,然后手動一行一行刪除。
【中級】按照單個字段的重復(fù)去重
例如:對id字段去重
使用方法:獲取id的重復(fù)字段的值,利用相同id字段所在的行中,比較出數(shù)據(jù)不同的字段,刪除 除了最小(或最大)的字段所在的該行之外的所有重復(fù)的行。一般使用主鍵來比較,因?yàn)橹麈I的值一定是唯一值,絕對不相同。
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 (……)這樣的格式,否則會報錯:
[Err] 1093 - You can't specify target table 'a_tmp' for update in FROM clause
【高級】按多個字段的重復(fù)來去重
例如:對id,name相同的去重,即:對id,name都相同的算作重復(fù)行,對id相同而name不同的算作不重復(fù)行
使用方法:和單個字段相似,一般使用主鍵來比較,因?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字段的值連接起來插入到臨時表中b_tmp,這樣便可以使用【中級】的單字段的判斷刪除方法。
#將兩字段連接的值,a_tmp表中唯一值的字段插入b_tmp表
insert into b_tmp
select concat(id,name),rowid from a_tmp;
#查出需要留下來的行
select id_name,max(rowid)
from b_tmp
group by id_name
having count(id_name)>1;
#使用【中級】的方法,或存儲過程完成去重的工作
【終極】每行都有兩份一樣的數(shù)據(jù)
例如:
使用方法:對于整行的數(shù)據(jù)都一樣,是沒辦法使用SQL語句刪除的,因?yàn)闆]有可以使用的條件限制來留下一行刪除所有與其相同的行。沒有不同的字段可以自己創(chuàng)造不同的字段,即:添加一個字段,設(shè)為自增長,并設(shè)為主鍵,它會自動添加上值。
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
操作:
添加一個自增長的字段,并暫時設(shè)為主鍵。
使用上面【中級】和【高級】的方法操作。
以上就是mysql去重的方法的詳細(xì)內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門到精通的SQL知識。