首頁 >資料庫 >mysql教程 >mysql去重的方法

mysql去重的方法

怪我咯
怪我咯原創
2017-07-06 11:25:482767瀏覽

這篇文章主要介紹了MySQL去重的方法整理的相關資料,需要的朋友可以參考下

##MySQL去重的方法來整理

【初級】有極少的重複行

使用distinct查出來,然後手動一行一行

刪除

【中級】依照單一欄位的重複去重

例如:對id欄位去重

使用方法:取得id的重複字段的值,利用相同id字段所在的行中,比較出資料不同的字段,刪除除了最小(或最大)的字段所在的該行之外的所有重複的行。一般使用主鍵來比較,因為主鍵的值一定是唯一值,絕對不相同。

id  name

1    a

1    b

2    c

2    a

3    c

結果:

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 up

date

in FROM clause

【進階】按多個欄位的重複來去重

##例如:對id,name相同的去重,即:對id,name都相同的算作重複行,對id相同而name不同的算不重複行

使用方法:和單一欄位相似,一般使用主鍵來比較,因為主鍵的值一定是唯一值。

id  name  rowid

1  a      1

1  a      2

1  b      3

2  b      4

2  b      5

3  c      6

3  d     7
結果:
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;

#使用【中级】的方法,或存储过程完成去重的工作

 【終極】每行都有兩份相同的資料

例如:

使用方法:對於整行的資料都一樣,是沒辦法使用SQL語句刪除的,因為沒有可以使用的條件限制來留下一行刪除所有與其相同的行。沒有不同的字段可以自行創造不同的字段,即:添加一個字段,設為自增長,並設為主鍵,它會自動添加上值。

id  name

1   a

1   a

1   b

1   b

2   c

2   c

3   c

3   c

結果:

id  name   rowid

1   a       1

1   b       3

2   c       5

3   c       7

#操作:

#新增一個自增長的字段,並暫時設為主鍵。

使用上面【中級】和【高級】的方法運算。

以上是mysql去重的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn