mysql distinct 与 group by

来源:互联网 时间:1970-01-01


使用数据库是需要对数据进行去重处理 ,之前听闻过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 byselect name from test_distinct group by id;OK ,问题解决。至于他们两个的详细信息,很多大神博客,我就不再赘述了。



相关阅读:
Top