mysql表中删除重复记录,只保留一条记录的操作
mysql表中两个字段重复记录,只保留一条记录的操作
例如有一张学生表
其中name 和 class 相同的视为重复记录,需要保留一条记录,删除重复记录,
两种操作方式如下:
方法一: group by
SELECT MIN(cs.id) AS id ,cs.`name` , cs.class FROM `ceshi` cs GROUP BY cs.`name` ,cs.`class`
查询结果如下:
此操作找出了需要保留的记录,即按name、class进行分组,取出id最小的记录,删除id不在上面的记录即可,最终保留的记录的id为1、3、4、5、6、8,原表中的2、7、9、10均为要删除的重复记录
删除sql如下:
DELETE FROM`ceshi` csWHEREcs.`id` NOT IN (( SELECT MIN(cs.id) AS id FROM `ceshi` cs GROUP BY cs.`name` ,cs.`class`) )
方法二:关联,因为是同一张表,使用 left join 或者inner join都可以
直接写sql如下:
delete t1FROM ceshi t1INNER JOIN ceshi t2ON t1.`name` = t2.`name`AND t1.`term` = t2.`term`WHERE t1.id > t2.id;
同样是保留id较小的记录,原理如下:
运行选中的代码,此时未加条件WHERE t1.id > t2.id;
这是找出两张表中的name与class相同的记录的视图,加上判断条件WHERE t1.id > t2.id;
:
仅查看t1的情况
对比元数据表,可以看到t1表中是id较大的记录 2、7、9、10刚好就是重复的记录,所以直接使用上面的delete t1
删除即可
来源地址:https://blog.csdn.net/weixin_42260782/article/details/132702760
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341