mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句

Posted python_worm

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句相关的知识,希望对你有一定的参考价值。

正好想写一条删除重复语句并保留一条数据的SQL,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 。如下:


表字段和数据: 

技术分享图片

SQL语句: 

  1. DELETE FROM `userWHERE id NOT IN(SELECT * FROM(SELECT id FROM `userGROUP BY username)AS b)  

理解:

先从里面的SQL开始看

1、SELECT id FROM `user` GROUP BY username  根据名字分组查询出每组的ID。

2、SELECT * FROM(SELECT id FROM `user` GROUP BY username) AS b  这句话中有2个疑问点,

   第一、为什么要套这样一个select?因为 更新数据时使用了查询,而查询的数据又做更新的条件,mysql不支持这种方式

    如果不套上这个select查询,那么将会报1093 -  You can‘t specify target table ‘user‘ for update in FROM clause错误。

第二、这句话中一定要取别名,不然会报1248 - Every derived table must have its own alias 错误

3、结合上面的分析来看一下整个的SQL语句理解,先将分组的ID查出来,然后删除USER表中ID 不在分组ID中的数据,那么就实现效果了。

delete from 表名 where  ID not in (select * from (select  id from 表名 group by 分组的列名)   别名)


效果如下:

技术分享图片

 

转自:http://blog.csdn.net/dsiori/article/details/52806709

 





以上是关于mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句的主要内容,如果未能解决你的问题,请参考以下文章

mysql删除重复数据,保留最新的那一条

从mysql数据库删除重复记录只保留其中一条(保留id最小的一条)

mysql 删除重复的数据保留一条

删除一张表中重复数据并保留一条ID最小的记录

Mysql 删除重复记录,只保留最小的一条

MySQL删除重复数据只保留一条