mysql删除重复数据
有一张学生表,有姓名和性别(0:女,1:男),假如我们想删除姓名和性别都相同的数据,这里介绍2中方法
首先看一下数据表
编号 | 姓名 | 性别 |
1 | 王璐 | 0 |
2 | 李萌 | 0 |
3 | 张帅 | 1 |
4 | 李萌 | 0 |
5 | 张帅 | 1 |
6 | 刘涛 | 1 |
NO.1
保留id较小的数据
DELETE t1 FROM student t1, student t2 WHERE t1.name = t2.name AND t1.sex = t2.sex AND t1.id > t2.id
保留id较大的数据
DELETE t1 FROM student t1, student t2 WHERE t1.name = t2.name AND t1.sex = t2.sex AND t1.id < t2.id
注意最后的t1.id > t2.id不要忘记,否则会删除所有的数据,操作之前一定要先备份好数据
NO.2
INSERT INTO student_tmp(name, sex) SELECT DISTINCT name, sex FROM student
总结
两种方法优缺点:
方法二所需时间更短,但是方法二当主键为uuid时,需要处理一下,可将把主键设置为int自增,然后执行下面的sql就可以了。
UPDATE student_tmp SET id = uuid()
参考:
https://stackoverflow.com/questions/4685173/delete-all-duplicate-rows-except-for-one-in-mysql