MySQL關鍵字Distinct的詳細介紹
MySQL關鍵字Distinct用法介紹
DDL
Prepare SQL:
create table test(id bigint not null primary key auto_increment, name varchar(10) not null, phone varchar(10) not null, email varchar(30) not null)engine=innodb;
Prepare Data:
insert into test(name, phone, email)values('alibaba','0517','alibaba@alibaba.com');
insert into test(name, phone, email)values('alibaba','0517','alibaba@alibaba.com');
insert into test(name, phone, email)values('baidu','010','baidu@baidu.com');
insert into test(name, phone, email)values('tencent','0755','tencent@tencent.com');
insert into test(name, phone, email)values('vipshop','020','vipshop@vipshop.com');
insert into test(name, phone, email)values('ctrip','021','ctrip@ctrip.com');
insert into test(name, phone, email)values('suning','025','suning@suning.com');
查詢數據如下圖所示:

第一種情況,使用Distinct關鍵字,查詢單列數據,如下圖所示:

結果:對 name 字段進行去重處理,符合預期期望,確實篩選掉了重復的字段值alibaba;
第二種情況,使用Distinct關鍵字(在前),查詢多列數據,如下圖所示:

結果:對 name 字段進行去重處理,結果不符合預期期望,沒有篩選掉重復的字段值alibaba;
第二種情況,使用Distinct關鍵字(在后),查詢多列數據,如下圖所示:

結果:對 name 字段進行去重處理,結果不符合預期期望,拋出SQL異常,錯誤碼:1064;
解決辦法:
不要用子查詢,用分組來解決:

總結: SQL查詢能用一條語句解決的盡量不要增加SQL的復雜度,特別是子查詢?。?!
以上就是關于MySQL關鍵字Distinct用法的講解,如有疑問,請留言或者到本站設討論,感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
order?by?+?limit分頁時數據重復問題及解決方法
這篇文章主要介紹了order?by?+?limit分頁時數據重復,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-03-03
mysql高效查詢left join和group by(加索引)
這篇文章主要給大家介紹了關于mysql高效查詢left join和group by,這個的前提是加了索引,以及如何在MySQL高效的join3個表 的相關資料,需要的朋友可以參考下2021-06-06

