在mysql去除重复记录的方法有很多,同时mysql还带了一个DISTINCT关键字就可以了,下面我来给大家详细介绍介绍去除重复记录sql语句吧,有需要了解的朋友可参考.
SQL SELECT DISTINCT 语句
语法:SELECT DISTINCT 列名称 FROM 表名称使用 DISTINCT 关键词
如果要从 "Company" 列中选取所有的值,我们需要使用 SELECT 语句:
SELECT Company FROM Orders
如需从 Company" 列中仅选取唯一不同的值,我们需要使用 SELECT DISTINCT 语句,代码如下:
SELECT DISTINCT Company FROM Orders
下面先来看看例子:
- table
- idname
- 1a
- 2b
- 3c
- 4c
- 5b
库结构大概这样,这只是一个简单的例子,实际情况会复杂得多,比如我想用一条语句查询得到name不重复的所有数据,那就必须使用distinct去掉多余的重复记录,代码如下:
select distinct name from table
得到的结果是:
- name
- a
- b
- c
好像达到效果了,可是,我想要得到的是id值呢?改一下查询语句吧,代码如下:
select distinct name, id from table
结果会是:
- idname
- 1a
- 2b
- 3c
- 4c
- 5b
distinct怎么没起作用?作用是起了的,不过他同时作用了两个字段,也就是必须得id与name都相同的才会被排除,突然灵机一闪,既然可以使用group_concat函数,那其它函数能行吗?
赶紧用count函数一试,成功,我想哭啊,费了这么多工夫,原来就这么简单,现在将完整语句放出,代码如下:
select *, count(distinct name) from table group by name
结果:
- idnamecount(distinctname)
- 1a1
- 2b1
- 3c1
最后一项是多余的,不用管就行了,目的达到,唉,原来mysql这么笨,轻轻一下就把他骗过去了,郁闷也就我吧,对了,还有容容那家伙,现在拿出来希望大家不要被这问题折腾.
哦,对,再顺便说一句,group by 必须放在 order by 和 limit之前,不然会报错,OK了.
补充:经过本人测试 select *, count(distinct name) from table group by name 就可以了.
查找所有重复数据,代码如下:
- /*查找所有重复数据*/
- SELECT`t1`.*
- FROM`t1`,(
- SELECT`name`,`add`
- FROM`t1`
- GROUPBY`name`,`add`
- HAVINGCOUNT(1)>1
- )AS`t2`
- WHERE`t1`.`name`=`t2`.`name`
- AND`t1`.`add`=`t2`.`add`;
- +----+------+-----+
- |id|name|add|
- +----+------+-----+
- |1|abc|123|
- |2|abc|123|
- |4|abc|123|
- |6|xzy|456|
- |7|xzy|456|
- |8|xzy|456|
- |9|xzy|789|
- |11|xzy|789|
- |12|ijk|147|
- |13|ijk|147|
- |19|tpk|963|
- |20|tpk|963|
- |21|wer|546|
- |22|wer|546|
- +----+------+-----+
- rowsinset(0.00sec)
查找除id最小的数据外的重复数据,代码如下:
- /*查找除id最小的数据外的重复数据*/
- SELECT`t1`.*
- FROM`t1`,(
- SELECTDISTINCTMIN(`id`)AS`id`,`name`,`add`
- FROM`t1`
- GROUPBY`name`,`add`
- HAVINGCOUNT(1)>1
- )AS`t2`
- WHERE`t1`.`name`=`t2`.`name`
- AND`t1`.`add`=`t2`.`add`
- AND`t1`.`id`<>`t2`.`id`;
- +----+------+-----+
- |id|name|add|
- +----+------+-----+
- |2|abc|123|
- |4|abc|123|
- |7|xzy|456|--phpfensi.com
- |8|xzy|456|
- |11|xzy|789|
- |13|ijk|147|
- |20|tpk|963|
- |22|wer|546|
- +----+------+-----+
- rowsinset(0.00sec)