关于mysql中删除重复记录,并保留重复数据中的一条数据的SQL语句的深入理解
程序员文章站
2023-10-11 18:31:09
正好想写一条删除重复语句并保留一条数据的sql,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 。如下:
表字段和数据:
sql语句:
delete from `use...
正好想写一条删除重复语句并保留一条数据的sql,网上查了一部分资料写的很详细,但还是在这里写下自己的理解,以遍后续学习 。如下:
表字段和数据:
sql语句:
delete from `user` where id not in(select * from(select id from `user` group 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 分组的列名) 别名)
效果如下:
上一篇: hive的实践部分
下一篇: 宇文直为什么*?浅谈背后的真正原因