mysql表中删除重复记录,只保留一条记录的操作

mysql表中两个字段重复记录,只保留一条记录的操作

例如有一张学生表

其中name 和 class 相同的视为重复记录,需要保留一条记录,删除重复记录,

两种操作方式如下:

方法一: group by

java 复制代码
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如下:

java 复制代码
DELETE 
FROM
	`ceshi` cs
WHERE
	cs.`id` NOT IN (
	( SELECT MIN(cs.id) AS id   FROM `ceshi`  cs GROUP BY cs.`name` ,cs.`class`) )

方法二:关联,因为是同一张表,使用 left join 或者inner join都可以

直接写sql如下:

java 复制代码
delete t1
FROM ceshi t1
INNER JOIN ceshi t2
ON 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删除即可

相关推荐
小白男神1 天前
MySQL进阶学习四(存储过程、游标、触发器)
mysql
这个DBA有点耶1 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G1 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备1 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远1 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
kybs19911 天前
全球灾害数据分析可视化 毕业设计-附源码66794
vue.js·spring boot·mysql·安全·django·c#·asp.net
2601_962218611 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
程序猿_极客1 天前
【免费】分享一套优质的基于SSM的校园失物招领系统的设计与实现,源码+文档+视频详解(讲解)
java·mysql·ssm·课程设计·失物招领系统
张洛闻Eren1 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安1 天前
MySQL-触发器
数据库·mysql