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删除即可

相关推荐
梦想的旅途24 小时前
企业微信外部群智能自动回复:基于RPA接口的关键词匹配方案
java·开发语言·数据库·机器人·自动化·企业微信
得物技术4 小时前
得物 OceanBase 落地实践
数据库·分布式·架构
程序员cxuan4 小时前
OceanBase 为什么要做 AI 数据库?
数据库·人工智能·大模型·llm·oceanbase
Alan_755 小时前
GraphQL 深度解析:为什么它能替代传统 REST API
数据库·后端
少时登峰5 小时前
【吃透 MySQL InnoDB连载】第 6 章・索引底层原理
数据库·mysql
许彰午5 小时前
从Oracle看MySQL聚簇索引的架构性缺陷与缓解之道
mysql·oracle·架构
AllData公司负责人5 小时前
数据集成管理|AIIData数据中台实现MySQL、Hive、Oracle一键接入Doris
大数据·数据库·人工智能·hive·mysql·oracle·数据分析
一嘴一个橘子5 小时前
mysql 的经验
mysql
Databend6 小时前
小 Bitmap,大优化:Databend 如何加速大规模集合聚合
大数据·数据库·sql
倔强的石头_6 小时前
KES 优化行为避坑指南-那条从没被质疑过的 LEFT JOIN,在迁 KES 时终于露馅了
数据库