明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

mysql去重的方法

[摘要]這篇文章主要介紹了MySQL去重的方法整理的相關(guān)資料,需要的朋友可以參考下MySQL去重的方法整理【初級(jí)】有極少的重復(fù)行使用distinct查出來(lái),然后手動(dòng)一行一行刪除!局屑(jí)】按照單個(gè)字段的重復(fù)去重例如:對(duì)id字段去重使用方法:獲取id的重復(fù)字段的值,利用相同id字段所在的行中,比較出數(shù)據(jù)不同的...
這篇文章主要介紹了MySQL去重的方法整理的相關(guān)資料,需要的朋友可以參考下

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í)】的方法操作。

以上就是mysql去重的方法的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!


學(xué)習(xí)教程快速掌握從入門(mén)到精通的SQL知識(shí)。




標(biāo)簽:mysql去重的辦法