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

相关推荐
凤凰院凶涛QAQ2 分钟前
《MySQL内核拆解:从SQL到InnoDB》(一) : 数据库基础&库操作&数据类型
数据库·sql·mysql
360智汇云6 分钟前
隔离VPC标准路径:出公网链路的设计与实现
android·服务器·数据库
紫金桥软件10 分钟前
紫金桥国产组态软件:安全稳定护航工业现场
数据库·自动化·跨平台·scada·组态软件
qq_4369621818 分钟前
金蝶云星空数据分析怎么做?
java·数据库·数据分析
坐吃山猪32 分钟前
ChromaDB09-数据库操作
数据库·chromadb
IntoTech英途汇骏40 分钟前
数据虚拟化平台选型分析:主流厂商解决方案与技术能力对比
数据库
程序猿阿森1 小时前
RAG 落地实践:离线索引 + 在线 FAQ 与混合检索全流程拆解
数据库·人工智能·rag
图特摩斯科技1 小时前
本体建模方式升级:OntoStudio 独创,2D vs 3D 构建本体应用
数据库·3d
天河归来1 小时前
请求原子性实现方式:Redis 互斥与数据库事务协同
数据库·redis·缓存
Navicat中国1 小时前
如何将 Navicat 的 AI 助手连接到本地 LLM
数据库·人工智能·navicat·本地llm