MySQL 去重方法之一

2021-10-02 05:19:48 字數 1104 閱讀 1182

在使用mysql時,有時需要查詢出某個欄位不重複的記錄,雖然mysql提供有distinct這個關鍵字來過濾掉多餘的重覆記錄只保留一條,但往往只用它來返回不重覆記錄的條數,而不是用它來返回不重記錄的所有值。其原因是distinct只能返回它的目標字段,而無法返回其它字段,這個問題讓我困擾了很久,用distinct不能解決的話,我只有用二重迴圈查詢來解決,而這樣對於乙個資料量非常大的站來說,無疑是會直接影響到效率的。

下面先來看看例子: 

table 

id name 

1 a 

2 b 

3 c 

4 c 

5 b 

庫結構大概這樣,這只是乙個簡單的例子,實際情況會複雜得多。 

比如我想用一條語句查詢得到name不重複的所有資料,那就必須使用distinct去掉多餘的重覆記錄。 

select distinct name from table 

得到的結果是: 

name 

a b 

c 好像達到效果了,可是,我想要得到的是id值呢?改一下查詢語句吧: 

select distinct name, id from table

結果會是:

id name

1 a2 b

3 c4 c

5 bdistinct怎麼沒起作用?作用是起了的,不過他同時作用了兩個字段,也就是必須得id與name都相同的才會被排除。。。。。。。

我們再改改查詢語句: 

select id, distinct name from table 

很遺憾,除了錯誤資訊你什麼也得不到,distinct必須放在開頭。難到不能把distinct放到where條件裡?能,照樣報錯。。。。。。。 

突然靈機一閃,既然可以使用group_concat函式,那其它函式能行嗎? 

趕緊用count函式一試,成功

現在將完整語句放出: 

select *, count(distinct name) from table group by name 

結果: 

id name count(distinct name) 

1 a 1 

2 b 1 

3 c 1 

MySQL去重插入方法

向資料庫插入資料,希望去重插入。一般去重插入有兩種策略 重複不插入 重複則替換 更新 準備表 create table user info id int 11 notnull comment id username varchar 50 character set utf8 collate utf8...

MySQL去重的方法整理

mysql去重的方法整理 初級 有極少的重複行 使用distinct查出來,然後手動一行一行刪除。中級 按照單個欄位的重複去重 例如 對id欄位去重 使用方法 獲取id的重複欄位的值,利用相同id欄位所在的行中,比較出資料不同的字段,刪除 除了最小 或最大 的字段所在的該行之外的所有重複的行。一般使...

mysql去重欄位 mysql多字段去重,並計數

問 題 mysql版本5.5.42 有兩個表,表結構與資料如下 1 goods表 create table goods id int 10 unsigned not null,product varchar 180 collate utf8mb4 unicode ci not null,size v...