MySQL中删除重复数据要求最终只保留一条

MySQL有两条以上重复数据时只保留一条 MySQL有两条以上重复数据时只取其中一条数据,其他的过滤掉 阅读详情

今天有小伙伴打电话寻求一个SQL相关的问题,大致是表中存在重复数据,需要删除掉重复数据保留一条的场景,因为没有说明具体删除规则,怎么简单怎么来吧,研究后决定尝试一下,思路是删除表中多余的重复记录(多个字段),只留有id最小的记录。

1.数据准备
MySQL数据库中有一个goods表,表中手动插入一些数据,最终表的内容如下:
在这里插入图片描述
2.思路分析
按照原来设计思路,4,5,6明显是重复数据,想要保留id为4的这行记录。
首先,对数据内容进行简单抽离,先查询出重复字段:

SELECT goods_detail, goods_title FROM goods GROUP BY goods_detail,goods_title HAVING COUNT(*) > 1;

在这里插入图片描述
其次,再查找出id,让id=4.最后合并的时候需要使用这个条件
在这里插入图片描述
最后,对SQL进行归并,因为是删除操作,首先想到的是先按照条件查询出要删除的结果,然后将select改为delete就可以实现删除操作,经过尝试后,写出查询的sql是:

select *  from goods a where ((a.goods_detail,a.goods_title) in(
SELECT  goods_detail, goods_title FROM goods GROUP BY goods_detail,goods_title HAVING COUNT(*) > 1))
and (a.id not in (
SELECT MIN(id) FROM goods GROUP BY goods_detail,goods_title HAVING COUNT(*) > 1));

确实得到了想要的结果:
在这里插入图片描述
随后尝试真将查询改为删除,来实现最终结果,可是,执行的时候却出现了问题:

DELETE  from goods a where ((a.goods_detail,a.goods_title) in(
SELECT  goods_detail, goods_title FROM goods GROUP BY goods_detail,goods_title HAVING COUNT(*) > 1))
and (a.id not in (
SELECT MIN(id) FROM goods GROUP BY goods_detail,goods_title HAVING COUNT(*) > 1));

报错信息如下:

[SQL]
DELETE  from goods a where ((a.goods_detail,a.goods_title) in(
SELECT  goods_detail, goods_title FROM goods GROUP BY goods_detail,goods_title HAVING COUNT(*) > 1))
and (a.id not in (
SELECT MIN(id) FROM goods GROUP BY goods_detail,goods_title HAVING COUNT(*) > 1));
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'a where ((a.goods_detail,a.goods_title) in(
SELECT  goods_detail, goods_title F' at line 1

不知道为什么会出现这种问题,开始百度,发现原因是MySQL不能将直接查处来的数据当做删除数据的条件,我们应该先把查出来的数据新建一个临时表,然后再把临时表作为条件进行删除功能。于是开始更改调整SQL语句:
第一版:

DELETE  FROM goods WHERE (goods_detail, goods_title) IN 
(SELECT goods_detail, goods_title FROM goods GROUP BY goods_detail, goods_title HAVING COUNT(*)>1) e
AND Id NOT IN 
(SELECT MIN(Id) AS Id FROM goods GROUP BY goods_detail, goods_title HAVING COUNT(*)>1) t;

仍然报错

[SQL]DELETE  FROM goods WHERE (goods_detail, goods_title) IN 
(SELECT goods_detail, goods_title FROM goods GROUP BY goods_detail, goods_title HAVING COUNT(*)>1) 
e
AND Id NOT IN 

(SELECT MIN(Id) AS Id FROM goods GROUP BY goods_detail, goods_title HAVING COUNT(*)>1) 
t;
[Err] 1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'e
AND Id NOT IN 

(SELECT MIN(Id) AS Id FROM goods GROUP BY goods_detail, goo' at line 3


分析可能是子查询中的内容没有变成临时表,还是属于原来的表,所以对SQL进行调整,将第一个子查询中,查出来的goods_detail和good_title两字字段组成一个临时表,第二条子句中的id组成临时表,再进行后续操作,调整如下(先用查询验证):

SELECT *  FROM goods WHERE (goods_detail, goods_title) IN 
(SELECT goods_detail, goods_title FROM 
(SELECT goods_detail, goods_title FROM goods GROUP BY goods_detail, goods_title HAVING COUNT(*)>1) 
e)
AND Id NOT IN 
(SELECT Id FROM 
(SELECT MIN(Id) AS Id FROM goods GROUP BY goods_detail, goods_title HAVING COUNT(*)>1) 
t);

可以查询出想要的结果,第五条和第六条
在这里插入图片描述
证明思路无误,将select * 改为delete,进行尝试:
在这里插入图片描述
用工具进行查询验证,发现id=5和id=6的数据成功删除。

后续验证:
在原有id=4基础上,增加5,6相同数据,id=2基础上增加7,8相同的数据,id=1基础上增加9相同数据。执行SQL语句后,发现新增的重复数据都被删除,只留下最原始的id=1,2,3,4四条纪录。

Mysql删除重复数据保留最小的id 的解决方法 主要介绍了Mysql删除重复数据保留最小的id 的解决方法,需要的朋友可以参考下 立即下载

相关推荐

死磕GMSSL通信-java/Netty系列(二)

Netty-tcnative再linux编译比较好编译,但是再window编译,我尝试了各种办法,总是编译失败,所以我采用半自动的方式进行编译,Netty-tcnative会生成临时文件,直接用vs打开,设置openssl的头文件和静态库路径,然后生成静态库,静态库改个名字放到jar包里边,其实自动编译也是这个原理哈哈O(∩_∩)O。直接传输五个证书的路径吗,之前有的是说要转成x509之类的,转来转去的有点麻烦,这个是直接传输证书路径,由底层gmssl去解析,格式必须是pem格式。然而,若项目已依赖于。

qq_36577699的博客 3025

Mysql删除重复数据只保留一条

以这张表为例,表里有两条数据,然后名字是相同的,但是id是不同的,现在要求是只留一条数据

怪咖@的博客 2万+

复现论文报错解决

博主复现论文代码过程中遇到的各种报错及解决方案~

rellvera的博客 1058

MySQL 中删除重复的数据并只保留一条

要在 MySQL 中删除重复的数据并只保留一条,可以使用下面的方法。

龚小帅的博客 1万+

Unity3D用c#脚本调用前端javascript函数:H5获取unity - webgl 加载并初始化完成的消息

unity3d发布的Webgl 可以作为静态文件加载到H5页面中,并通过javascript 调用unity内置的C#脚本函数,详见Webgl调用unity api。而往往我们需要知道Webgl ready的消息,本文将给出unity 内部调用javascript函数的方案加以解决。

Bravo 2475

用 C# 快速构建一套可扩展的上位机框架(实战+源码思想)

本文介绍了一套基于C#的工业上位机开发框架设计方案。该框架通过模块化设计解决了上位机开发中的常见痛点,包括协议适配、通信管理、UI绑定等问题。核心架构采用分层设计,包含协议接口层、调度器层、通信抽象层和UI层,支持MVVM模式。框架提供了协议插件化扩展能力,通过JSON配置实现设备协议定义,同时封装了日志管理、异常处理等基础功能。该方案具有快速搭建、协议驱动、UI分离等特点,可显著提升上位机开发效率,适用于串口、TCP等多种通信场景,并能快速适配新设备协议。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 884

mysql中去除重复数据,只保留一条。

梳理一下删除重复记录的逻辑

weixin_75052326的博客 1万+

PON架构(全光网络)

目前组网架构世界上有一种最快的速度又是光,以前传统以太网络规划满足不了现在的需求。有线网 无线网 全光网络方案场景 全光网络分类 以太全光网络 PON(Pas-sive-Optical Network 无源光网络) 再典型的中大型高校网络中 推荐万兆入室 千兆到桌面的带宽设计 一般三层 (终端-接入层-汇聚层-核心层-出口(安全设备)-互联网) 单校区核心设备 一般采用两台高性能的核心交换机 双机的方式采用的是 M-LAG 多校区之间核心交换机采用1

qq_56248592的博客 6268

MYSQL group by后删除每个分组中的重复数据,只保留最新一条

MYSQL group by后删除每个分组中的重复数据,只保留最新一条。

u010865136的专栏 5379

9.6华为OD机试真题 新系统【仓储货物有序出库】

华为OD机试真题 新系统【仓储货物有序出库】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题 【仓储货物有序出库】多语言题解。

qq_45776114的博客 877

Windows安装 OpenClaw详细教程(使用wsl2+ubuntu)

OpenClaw 是一款于 2026年1月 正式对外开源的个人AI助手平台(AI Agent),由 PSPDFKit 创始人彼得·斯坦伯格(Peter Steinberger) 开发。它不仅仅是一个聊天机器人,更是一个能够主动执行任务的“数字管家”。OpenClaw的核心特点是本地化部署、隐私可控以及强大的自动化执行能力。OpenClaw 项目在开发过程中经历过两次更名,最终定为现名:初名:Clawdbot(因与 Claude 名称过于相似引发侵权争议而改名)。

猿小白的博客 1006

一条sql语句完成MySQL去重留一

自己百度 找到了一条sql语句: DELETE FROM vitae a WHERE (a.peopleId, a.seq) IN ( SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 ) AND rowid NOT IN ( ...

三月神的专栏 1354

Matlab可调用MODTRAN5封装器之Mod5

MODTRAN 是一个计算地球大气中电磁辐射传输的软件代码。MODTRAN是通过使用具有严格格式的输入文本文件来控制的。这个文件被称为“tape5”,扩展名为.tp5或.ltn。手工创建或编辑这个文件是不方便的。Mod5提供了一组函数来简化MODTRAN用例的处理。这些方法包括将tape5文件格式读取到Mod5类“实例”或“对象”中,更改文件中描述的案例实例,将tape5格式写回文件,在案例上运行MODTRAN并将MODTRAN输出文件中的各种结果读取回Matlab。还有许多绘图方法可用。

qq_19512613的博客 3254

mysql-常用特殊sql的使用总结

一 重复数据的处理 1.1 使用表和数据的介绍 1.使用的是product_comment,商品评论表,表结构,以及语料,见下图 CREATE TABLE `product_comment` ( `comment_id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '评论ID', `product_id` int(10) unsigned NOT NULL COMMENT '商品ID', `order_id` bigint(20) u

健康平安的活着的专栏 1383

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

mysql数据库删除重复的数据保留一条

1.问题引入 假设一个场景,一张用户表,包含3个字段。id,identity_id,name。现在身份证号identity_id和姓名name有很多重复的数据,需要删除只保留一条有效数据。 2.模拟环境 1.等入mysql数据库,创建一个单独的测试数据库mysql_exercise create database mysql_exercise charset utf8; 2.创建用户表us...

生有涯,知无涯 6万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

MySQL删除重复数据只保留最新的一条

MySQL删除重复数据并保留最新的一条,网上有些博客写的有问题,因为他们只考虑到或者说他们的重复数据最多只有两条,当重复数据大于2时,就会出现问题。 案例描述: 按天删除表中重复数据只保留最新的一条(这里按照id越大,数据越新),注意,一天中可能出现多条数据。重复数据以name为准,即name相同视为重复 案例表结构和数据 CREATE TABLE `test` ( `id` int(11) ...

p7+的博客 7457

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MySql删除重复数据(只保留一条)

MySql删除重复数据 1. 问题引入 前一段遇到MySql数据重复的问题。由于重复向同一张表导入同一批数据,导致前台展示的数据重复,唯一方便快捷的方法莫过于利用delete操作删除重复数据(已经封板发布),只保留其中一条数据。但真的是书到用时方恨少,技术也如此。当时只好在网上搜索资源,最终解决了燃眉之急。但是对找到的delete语句并不是太理解,后来抽时间自己研究了一下。现在稍微理解了一点,分享给大家,希望对大家有帮助。 2.数据准备 创建表 CREATE TABLE test_del_repeti

木子 2万+

mysql删除重复数据只保留一条

_id` char(32) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=gbk; 测试数据: INSERT INTO `book` VALUES ('1', 'n1', '1'); INSERT INTO `book` VALUES ('2', 'n2', '1'); INSERT INTO `book` VALUES ('3', 'n3', '1'); INSERT INTO

1万+

mysql 删除重复数据只保留一条记录

删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id from order_info group by order_number) as b);   delete from table where id not in (select min(id

乐在克里特的博客 2万+

MYSQL 查找单个字段或者多个字段重复数据,清除重复数据,保留一条

MYSQL 查找单个字段或者多个字段重复数据,清除重复数据

xnian_的博客 1万+

mysql删除重复记录并且只保留一条

删除重复记录并且只保留一条

eagle89的专栏 1万+

MySQL如何删除重复数据

微信搜索“coder-home”或扫一扫下面的二维码,关注公众号,第一时间了解更多干货分享,还有各类视频教程资源。扫描它,带走我 文章目录初始化实验环境明确需求查找重复的数据查找要保留的数据删除重复的数据方法一方法二方法三写法1写法2总结 MySQL中经常会遇到重复的数据,那么当我们遇到重复的时候的时候,如果定位哪些数据是有重复的记录?如何删除重复的数据?我们该怎么做呢?接下来我们一步步来分析一下遇到这样的情况后,该如何处理。 初始化实验环境 我们创建一个简单的表user_info,然后基于这个表进行.

程序猿集锦的博客 2万+

Mysql 删除重复数据保留一条有效数据

©Copyright 蕃薯耀 2023-01-31。©Copyright 蕃薯耀 2023-01-31。Mysql 删除重复数据,保留一条有效数据。

蕃薯耀的博客 1万+

mysql 查询删除重复数据,保留其中一条数据

注意:这种写法 必须保证有一个主键 如id,删除多余数据是 ,是根据id,保留最小或者最大的一条数据。--------根据多个字段查询重复数据。

博客简介 1万+

[mysql] 删除重复数据,只保留一条

需求: 业务表有脏数据了,很多重复数据,导致报错 现要将重复数据都删掉,只留一条 实现: 1、搞一张表,模拟数据 想要的结果:panda留一条、kongfu留一条 2、思路: 1、分组,将重复数据查出来 2、通过id区分,留id最小的一条 3、删除,刨除id最小的一条 3、脚本: DELETE FROM panda_test WHERE panda_name IN ( SELECT panda_name FROM ( SELECT panda_name

FightingITPanda的博客 570
上一篇: 学习系列之并发编程(四)
下一篇: 学习系列之并发编程(五)
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值