MySQL去重的方法整理

2022-09-26 12:00:15 字數 2267 閱讀 7092

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 h**ing count(b.id) >1) bb)

and name not in (select * from (select min(a.name) from a_tmp a group by a.id h**ing count(a.id) >1) aa);

注意:上述加粗並綠色的字,必須加別名,必須使用select * from (……)這樣的格式,否則會報錯:

[err] 1093 - you can't specify target tabwww.cppcns.comle 'a_tmp' for update in from clause

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

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

使用方法:和單個字段相似,一般使用主鍵來比較,因為主鍵的值一定是唯c**ob一值。

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 h**ing 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 h**ing count(a.id) >1) aa)www.cppcns.com;

第二種:

將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

h**ing count(id_name)c**ob>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

操作:新增乙個自增長的字段,並暫時設為主鍵。

使用上面【中級】和【高階】的方法操作。

本文位址:

陣列去重方法整理

陣列去重看似乙個簡單的問題,隨著我們的學習,對於新知識的掌握這個曾經困著我們的問題逐漸變得游刃有餘。要去重,中心解決辦法就是比較該陣列中是否重複的元素,而後將重複的元素去掉。以下帶來幾個樓主折磨自己中研究出的一點方法 for迴圈法 思路 將陣列中的每乙個數與陣列中其他的數進行比較,看是否有相同的。如...

整理陣列去重的幾種常用方法

最近面試有乙個面試題,要求盡可能多的列舉陣列去重的方法,現整理一下 最簡單陣列去重法 新建一新陣列,遍歷傳入陣列,值不在新陣列就push進該新陣列中 ie8以下不支援陣列的indexof方法 function uniq array return temp var aa 1,2,2,4,9,6,7,5...

JS實現陣列去重方法整理

我們先來看下面的例子,當然 與網路,位址 刪除陣列中多個不連續的陣列元素的正確姿勢 我們現在將陣列中所有的 a 元素刪除 var arr a a b c d a a e g a f arr.foreach function value,index console.log arr a b c d a ...