mysql去重复查询(MySQL去重复)
本文目录一览:
mysql怎么去除重复数据
场景:表中包含有group_id,worker_id,status字段,查询这三个字段是否存在重复的数据。
mysql去重复查询(MySQL去重复)
查找某个人在某个班组内存在多个status为0的数据
查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来
查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来,并设置status为1
将查询查询结果作为where in的条件,需要select的结果再通过一个中间表select多一次,否则会报You can't specify target table for update in FROM clause。
//去除重复的数据 如果是重复的只显示1个
select distinct d_name from tbl_vod
--下面是查出重复的记录
select d_name from tbl_vod
minus
select distinct d_name from tbl_vod
用Distinct在MySQL中查询多条不重复记录值[1]
场景:表中包含有group_id,worker_id,status字段,查询这三个字段是否存在重复的数据。
查找某个人在某个班组内存在多个status为0的数据
查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来
查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来,并设置status为1
将查询查询结果作为where in的条件,需要select的结果再通过一个中间表select多一次,否则会报You can't specify target table for update in FROM clause。
//去除重复的数据 如果是重复的只显示1个
select distinct d_name from tbl_vod
--下面是查出重复的记录
select d_name from tbl_vod
minus
select distinct d_name from tbl_vod
在使用 mysql时 有时需要查询出某个字段不重复的记录 虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条 但往往只用它来返回不重复记录的条数 而不是用它来返回不重记录的所有值 其原因是distinct只能返回它的目标字段 而无法返回其它字段 这个问题让我困扰了很久 用distinct不能解决的话 我只有用二重循环查询来解决 而这样对于一个数据量非常大的站来说 无疑是会直接影响到效率的 所以我花了很多时间来研究这个问题 网上也查不到解决方案 期间把朋友拉来帮忙 结果是我们两人都郁闷了!
下面先来看看例子
tableid name a b c c b
库结构大概这样 这只是一个简单的例子 实际情况会复杂得多
比如我想用一条语句查询得到name不重复的所有数据 那就必须使用distinct去掉多余的重复记录
select distinct name from table
得到的结果是:
nameabc
好像达到效果了 可是 我想要得到的是id值呢?改一下查询语句吧:
select distinct name id from table
lishixinzhi/Article/program/MySQL/201311/295
MYSQL过滤表中某几个字段重复的数据
场景:表中包含有group_id,worker_id,status字段,查询这三个字段是否存在重复的数据。
查找某个人在某个班组内存在多个status为0的数据
查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来
查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来,并设置status为1
将查询查询结果作为where in的条件,需要select的结果再通过一个中间表select多一次,否则会报You can't specify target table for update in FROM clause。
mysql删除重复数据,保留一条
场景:表中包含有group_id,worker_id,status字段,查询这三个字段是否存在重复的数据。
查找某个人在某个班组内存在多个status为0的数据
查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来
查找某个人在某个班组内存在多个status为0的数据,将最小的id选出来,并设置status为1
将查询查询结果作为where in的条件,需要select的结果再通过一个中间表select多一次,否则会报You can't specify target table for update in FROM clause。
//去除重复的数据 如果是重复的只显示1个
select distinct d_name from tbl_vod
--下面是查出重复的记录
select d_name from tbl_vod
minus
select distinct d_name from tbl_vod
在使用 mysql时 有时需要查询出某个字段不重复的记录 虽然mysql提供有distinct这个关键字来过滤掉多余的重复记录只保留一条 但往往只用它来返回不重复记录的条数 而不是用它来返回不重记录的所有值 其原因是distinct只能返回它的目标字段 而无法返回其它字段 这个问题让我困扰了很久 用distinct不能解决的话 我只有用二重循环查询来解决 而这样对于一个数据量非常大的站来说 无疑是会直接影响到效率的 所以我花了很多时间来研究这个问题 网上也查不到解决方案 期间把朋友拉来帮忙 结果是我们两人都郁闷了!
下面先来看看例子
tableid name a b c c b
库结构大概这样 这只是一个简单的例子 实际情况会复杂得多
比如我想用一条语句查询得到name不重复的所有数据 那就必须使用distinct去掉多余的重复记录
select distinct name from table
得到的结果是:
nameabc
好像达到效果了 可是 我想要得到的是id值呢?改一下查询语句吧:
select distinct name id from table
lishixinzhi/Article/program/MySQL/201311/295
mysql数据表中有多条重复数据记录,现在想删除删除部分重复数据,保留一条更新或者插入的数据。
以学生表为例,我们创建一个简单的数据表来做实验:
往表里面插入一些实验数据:
我们可以根据分组查询先将重复数据查询出来,同时也可以获取到的更新时间,然后再与原表联表查询小于时间的数据,将查询出来的数据删除。
------先来慢慢消化-------
在做删除前,我们可以先看看有哪些数据是有重复的:
可以看到张三,李四,王五的数据是有重复的,赵六没有重复,下面我们查找更新的记录。
可以看到,更新的数据为15:57:46的记录没有在结果中。
可以看到重复记录已经被清理掉。
如有两行记录是完全一样的,这个方法就不可行了,往表里面在跑一次数据插入:
执行删除:
创建一个临时表存放插入的一条数据(包含重复与没有重复的),然后清空原表,再将临时表的数据到原表中,把临时表删除。
这个很好理解,相当于ctrl+c,ctrl+v的作,数据表如下:
这样数据去重就完成了,需要注意的是, 如果表数据量很大,注意在group by 里面的字段建立索引,同时,生产环境注意好先进行数据备份作 。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系 836084111@qq.com 删除。