mysql distinct 與 group by

使用數據庫是需要對數據進行去重處理 ,之前聽聞過distinct,使用以後,以爲已經搞定,在最後上線前的測試才發現差點捅了簍子,於是當時有老老實實的在程序中進行了過濾處理,今天詳細看了一下。
建立一張表:
create table test_distinct(
name varchar(20),
id int ,
address varchar(40)
);
填入數據:
insert into test_distinct values(‘lisi’,21,’beijing’);
insert into test_distinct values(‘wangwu’,21,’beijing’);
insert into test_distinct values(‘zhaoliu’,21,beijing);
比如我們只希望得到id爲21的一個人的記錄,我們不關心他是誰,他在哪裏住,當我聽聞了distinct的用法後,就寫出了下面的sql
select distinct id from test_distinct ;
結果只有21,挺開心,然後,想拿到一個年齡爲21 的一個人,就寫出了下面的sql
select distinct id, name from test_distinct ;
結果拿到全部的數據。。。
不甘心,就又用了下面的sql
select distinct(id),name from test_distinct;
心想都已經加了小括號了,應該可以了,結果依然是一樣的全部的數據。。。。
百度後,才知道原來distinct是把後面的全部列作爲去重的依據,name不同,自然就全部select出來了。
加了下面的句子,測試用:
insert into test_distinct values(‘wangwu’,21,’nanjing’);
在用之前的sql查詢,結果只有3條,看來後來百度的結果是對的。

問題來了,之前的需求怎麼解決?

肯定不用distinct了,都試了不好用了,換一個,group by
select name from test_distinct group by id;
OK ,問題解決。
至於他們兩個的詳細信息,很多大神博客,我就不再贅述了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章