我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

目录

前期准备:建表插入数据

1、通过group by 和count(1)>1找出有重复的数据

 2、通过每个分组中的最小id来去重

        2.1、添加主键id列

        2.2 去重

                2.2.1、首先找出每个分组中count(1) >1的数据中的最小id【min(id)】,sql语句如下:

                 2.2.2、再将上表和emp表做表连接,sql语句如下:


-- 创建表格empDROP TABLE IF EXISTS `emp`;CREATE TABLE `emp`  (  `EMPNO` int(0) NULL DEFAULT NULL,  `ENAME` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,  `JOB` varchar(9) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,  `MGR` int(0) NULL DEFAULT NULL,  `HIREDATE` date NULL DEFAULT NULL,  `SAL` int(0) NULL DEFAULT NULL,  `COMM` int(0) NULL DEFAULT NULL,  `DEPTNO` int(0) NULL DEFAULT NULL) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;-- 插入数据INSERT INTO `emp` VALUES (7566, '琼斯1', '经理', 7839, '1981-04-02', 2975, NULL, 20);INSERT INTO `emp` VALUES (7654, '马丁', '售货员', 7698, '1981-09-28', 1250, 1400, 30);INSERT INTO `emp` VALUES (7782, '克拉克', '经理', 7839, '1981-06-09', 2450, NULL, 10);INSERT INTO `emp` VALUES (7788, '斯科特', '分析师', 7566, '1987-04-19', 3000, NULL, 20);INSERT INTO `emp` VALUES (7839, '国王', '总统', NULL, '1981-11-17', 5000, NULL, 10);INSERT INTO `emp` VALUES (7844, '特纳', '售货员', 7698, '1981-09-08', 1500, 0, 30);INSERT INTO `emp` VALUES (7876, '亚当斯', '店员', 7788, '1987-05-23', 1100, NULL, 20);INSERT INTO `emp` VALUES (7900, '詹姆斯', '店员', 7698, '1981-12-03', 950, NULL, 30);INSERT INTO `emp` VALUES (7902, '福特', '分析师', 7566, '1981-12-03', 3000, NULL, 20);INSERT INTO `emp` VALUES (7521, '沃德', '售货员', 7698, '1981-02-22', 1250, 500, 30);INSERT INTO `emp` VALUES (7934, '米勒', '店员', 7782, '1982-01-23', 1300, NULL, 10);INSERT INTO `emp` VALUES (7499, '艾伦', '售货员', 7698, '1981-02-20', 1600, 300, 30);INSERT INTO `emp` VALUES (7698, '布莱克', '经理', 7839, '1981-05-01', 2850, NULL, 30);INSERT INTO `emp` VALUES (7566, '琼斯', '经理', 7839, '1981-04-02', 2975, NULL, 20);SET FOREIGN_KEY_CHECKS = 1;

表格来自oracle自带emp表。

SELECT  ename,count(1) FROM emp GROUP BY ename HAVING count(1) >1;

在group by 之后 count(1)> 1代表其分组数据是重复的。

 具体group by 字段根据实际情况需求添加。

结果如下:

        2.1、添加主键id列

由于表格没有主键列,所以需要新增id自增。

ALTER TABLE emp add id int first; -- 改变表结构,增加名为id的列ALTER table emp MODIFY id int PRIMARY key auto_increment; -- 将id字段设置为主键自增;

        2.2 去重

          2.2.1、首先找出每个分组中count(1) >1的数据中的最小id【min(id)】,sql语句如下:

SELECT min(id) id,ename,count(0) FROM emp GROUP BY ename HAVING count(1) >1;

结果如下:

          2.2.2、再将上表和emp表做表连接,sql语句如下:

SELECT t1.*,t2.* fromemp t1inner join (SELECT min(id) id,ename,count(0) FROM emp GROUP BY ename HAVING count(1) >1) t2on t1.ENAME = t2.ENAME;

结果如下:

         可以看出t1.id和t2.id之间的联系,我们只需要删除t1.id > t2.id的数据,只留下每组中id最小的值和count(1)= 1 的数据。

        需要用到MySQL DELETE语句使用INNER JOIN子句,语法如下:

DELETE  a FROM table1 AS a LEFT JOIN table2 AS b ON 连接条件 WHERE 过滤条件;

        完整去重sql语句如下:

DELETE t1 fromemp t1inner join (SELECT min(id) id,ename,count(0) FROM emp GROUP BY ename HAVING count(1) >1) t2on t1.ENAME = t2.ENAMEwhere t1.id > t2.id;

来源地址:https://blog.csdn.net/weixin_75052326/article/details/130744456

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

(1)以这张表为例: CREATE TABLE `test` ( `id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '注解id',
2023-08-16

MySQL怎样删除重复数据,只保留一条?

在实际工作开发过程中,常常会遇到数据库表中存在多条数据重复了,此时我们需要删除重复数据,只保留其中一条有效的数据; 针对这种场景,我们用SQL语句该怎么实现呢? 数据准备 建表语句: DROP TABLE IF EXISTS `test`;
2023-08-30

oracle去除重复数据并保留一条

一般用第二种方法即可。
oracle去除重复数据并保留一条
2019-04-16

Oracle中实现删除重复数据只保留一条

目录oracle删除重复数据只保留一条Oracle删除重复记录,保留一条,没有主键的情况总结Oracle删除重复数据只保留一条查询及删除重复记录的SQL语句1、查找表中多余的重复记录,重复记录是根据单个字段(Id)来判断select
2023-02-15

Mysql删除重复数据并且只保留一条(附实例!)

(1)以这张表为例:CREATE TABLE `test` (`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '注解id',`na
2023-02-01

mysql查询重复数据只保留一条怎么实现

要查询重复数据并保留一条唯一记录,可以使用以下步骤来实现:使用GROUP BY子句和聚合函数来找出重复数据,并只保留一条记录。使用HAVING子句来筛选出重复数据的记录。使用子查询或临时表来存储重复数据的记录,并通过主键或唯一索引来删除
mysql查询重复数据只保留一条怎么实现
2024-03-05

mysql怎么删除重复值只保留一个

你可以使用以下步骤来删除重复值,只保留一个:首先,使用 SELECT DISTINCT 查询语句来查找出所有的不重复值。SELECT DISTINCT * FROM your_table;创建一个临时表,将不重复的数据插入到临时表中。C
mysql怎么删除重复值只保留一个
2024-04-09

Mysql 删除重复数据保留一条有效数据(最新推荐)

目录mysql 删除重复数据保留一条有效数据一、Mysql 删除重复数据,保留一条有效数据二、Mysql 删除重复数据(多个字段分组)三、Mysql 查询出可以删除的重复数据补充:mysql删除重复记录并且只保留一条MySql如何删除所有多
2023-02-06

SQL删除重复的记录(只保留一条)-窗口函数row_number()

文章目录 一、关于mysql表中数据重复二、聚合函数min(id)+not in二、窗口函数row_number()四、补充:常见的窗口函数 一、关于mysql表中数据重复 关于删除mysql表中重复数据问题,本文中给到两种
2023-08-30

mysql删除重复记录并且只保留一条的实现方法

准备的测试表结构及数据插入的数据中A,B,E存在重复数据,C没有重复记录CREATE TABLE `tab` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(20) DEFAUL
2023-01-04

MySQL 查询重复数据,删除重复数据保留id最小的一条作为唯一数据

很多东西都是需要自己一步一步的去探究的,当然网上的建议也是非常宝贵的借鉴和资源,无论做什么开发我们都需要理解它的工作原理才能够更好的掌握它。

mysql清理重复数据,并保留最新一条

背景 之前,数据是通过表单提交 后来增加了excel批量导入的功能,但是这个接口没有判断数据重复,覆盖更新 导致线上环境出现大量重复数据 如果要保证数据库不出现重复数据,可以添加唯一索引来限制 参考:Mysql重复数据查重保留一条(i
2023-08-16

MySQL中通过SQL语句删除重复记录并且只保留一条记录

目录一、单个字段的操作1、 查询全部重复的数据2、删除全部重复试题3、查询表中多余重复试题(根据depno来判断,除了rowid最小的一个)4、删除表中多余重复试题并且只留1条二、多个字段的操作总结最近在做题库系统,由于在题库中添加了重复的
2023-01-04

MySQL 数据库查询数据,过滤重复数据保留一条数据-

转自: http://www.maomao365.com/?p=10564  摘要: 下文讲述MySQL数据库查询重复数据时,只保留一条数据的方法 实现思路: 在MySQL数据库中没有row_number函数,所以我们需变向实现此功能。 --1.基础数据
MySQL 数据库查询数据,过滤重复数据保留一条数据-
2021-10-02

编程热搜

目录