当前位置:网站首页>Mysql去除重复数据
Mysql去除重复数据
2022-08-03 05:28:00 【DurantJiang】
最近工作业务上遇到需要去除重复数据,所以了解了一下如何去除某属性相同的数据!
1:查询出重复数据
以用户表user为例,我们需要去除login_name重复的数据,那么我们首先需要查询一下哪些数据是重复的。
sql如下:
SELECT login_name FROM user GROUP BY login_name HAVING COUNT(login_name) > 1
这条语句根据group by 和having count(login_name) 查询出了重复数据的login_name,如果有结果集,那么证明是有重复数据的,该如何去重呢?
2:去除重复数据
思考一下,我们可以根据查询出重复数据的login_name,来确定需要删除的数据的条件,我们可以这样写sql来进行重复数据的删除
DELETE FROM `user` WHERE login_name IN ( SELECT login_name FROM `user` GROUP BY login_name HAVING count(login_name) > 1 ) AND id NOT IN ( SELECT min(id) AS aa FROM `user` GROUP BY login_name HAVING count(login_name) > 1 );
如上所示:查询出当前重复的login_name作为删除条件,但是不能将重复的数据全部删除完,所有我们查询出了重复数据当中的其中一个id,也就是min(id)作为不被删除的条件,当然也可以用max(id);这样我们执行一下;会发现报出了如下错误:
[Err] 1093 - You can't specify target table 'user' for update in FROM clause
这个错误的意思是:不能在同一表中查询的数据作为同一表的更新数据!那么我们可以中转一下,将查询出来的结果映射成一个表,就可以了!
sql 如下:
DELETE FROM `user` WHERE login_name IN ( SELECT a.login_name FROM ( SELECT login_name FROM `user` GROUP BY login_name HAVING count(login_name) > 1 ) AS a ) AND id NOT IN ( SELECT b.aa FROM ( SELECT min(id) AS aa FROM `user` GROUP BY login_name HAVING count(login_name) > 1 ) AS b );
执行该语句,发现执行成功,数据已经成功去重!
边栏推荐
猜你喜欢
随机推荐
次世代建模到底需要哪些美术基础
JDBC从手写连接到引用DBCP和C3P0
802.1AS的SystemIdentity理解
Oracle 数据库集群常用巡检命令
AQS、CAS、Synchronized小理解
【nohup】nohup命令的简单使用
PHP Composer常用命令积累
Podman can learn in one piece
用DirectX12绘制一个几何体的程序详述
3d建模师为什么不建议入行
【应届生租房】应届生如何租房以及注意事项
TFS (Azure conversation) prohibit people checked out at the same time
ue4学习日记2(项目迁移,画刷,附材质)
数组与字符串15-最大连续1的个数
C # program with administrator rights to open by default
【随笔】把喜欢的事情提上日程吧
contos安装php-ffmpeg和tp5.1使用插件
SSL证书过期后怎么办?
【3D建模制作技巧分享】ZBrush快捷键如何设置
MySQL的主从复制