(1)以这张表为例:

CREATE TABLE `test`  (`id` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '注解id',`name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '名字',PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;INSERT INTO test (id,`name`) VALUES (replace(uuid(),'-',''),'张三'),(replace(uuid(),'-',''),'张三');

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

(2)查询name值重复的数据:

现实开发当中可能一个字段无法锁定重复值,可以采取group by多个值!利用多个值来锁定重复的行数据!

SELECT name FROM test GROUP BY `name` HAVING count( name ) > 1

(3)查询重复数据里面每个最小的id:

SELECT  min(id) as id FROM test GROUP BY `name` HAVING count( name ) > 1

(4)查询去掉重复数据最小id的其他数据:也就是要删除的数据!

SELECT * FROM test
WHERE name IN ( SELECT name FROM test GROUP BY `name` HAVING count( name ) > 1 )
AND
id NOT IN (SELECT min( id ) FROM test GROUP BY `name` HAVING count( NAME ) > 1)

(5)删除去掉重复数据最小id的其他数据:

可能这时候有人该说了,有了查询,直接改成delete不就可以了,真的是这样吗?其实不是的,如下运行报错:

首先明确一点这个错误只会发生在delete语句或者update语句,拿update来举例 : update A表 set A列 = (select B列 from A表); 这种写法就会报这个错误,原因:你又要修改A表,然后又要从A表查数据,而且还是同层级。Mysql就会认为是语法错误!

嵌套一层就可以解决,update A表 set A列 = (select a.B列 from (select * from A表) a); 当然这个只是个示例,这个示例也存在一定的问题,比如(select a.B列 from (select * from A表) a)他会查出来多条,然后赋值的时候会报 1242 - Subquery returns more than 1 row

嵌套一层他就可以和update撇清关系,会优先查括号里面的内容,查询结果出来过后会给存起来,类似临时表,可能有的人该好奇了,update A表 set A列 = (select B列 from A表); 我明明加括号了呀,难道不算嵌套吗,当然不算,那个括号根本没有解决他们之间的层次关系!

详解看这篇文章:https://blog.csdn.net/weixin_43888891/article/details/127000534

(6)正确的写法:

方式一:

DELETE FROM test
WHERE name IN ( select a.name from (SELECT name FROM test GROUP BY `name` HAVING count( name ) > 1) a)
AND
id NOT IN (select a.id from (SELECT  min(id) as id FROM test GROUP BY `name` HAVING count( name ) > 1) a)

注意:删除之前一定要先查询,然后再删除,否则一旦语法有问题导致删了不想删除的数据,想要恢复很麻烦!或者删除前备份好数据,不要嫌麻烦,一旦出问题,才是真正的大麻烦!

方式二:

DELETE FROM test
WHEREid NOT IN (SELECTt.id
FROM( SELECT MIN(id) as id FROM test GROUP BY NAME ) t)

(7)错误的写法: 这块我吃过一次亏,所以专门写出来,避免踩坑!

千万千万不能这么搞,下面这个语法相当于是先按name分组,然后查出来大于1的,这时候假如大于1的有很多,然后外面嵌套的那一层,只取了最小的一条数据,然后再加上使用的是NOT IN,最终会导致数据全部被删除!!!

执行前有四条数据,实际上我们要的是张三留下来一条,然后李四留下来一条

执行结果:只留下了一条!

Mysql删除重复数据只保留一条相关推荐

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

    MySql删除重复数据 1. 问题引入 前一段遇到MySql数据重复的问题.由于重复向同一张表导入同一批数据,导致前台展示的数据重复,唯一方便快捷的方法莫过于利用delete操作删除重复数据(已经封板 ...

  2. mysql删除重复数据只保留一条_mysql查找删除重复数据并只保留一条实例详解

    有这样一张表,表数据及结果如下: school_id school_name total_student test_takers 1239 Abraham Lincoln High School 55 ...

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

    删除重复数据保留name中id最小的记录 delete from order_info where id not in (select id from (select min(id) as id fr ...

  4. mysql删除重复数据只保留一条_【SQL】mysql删除重复数据只保留一条

    清洗数据的时候,发现有重复数据. 之前多用EXCEL处理数据,一键就可以delete了.这次因为数据量相对较大换了mysql. 按照百度搜到的一个高票代码,运行了半天都不对. 一直报错: 即按照mys ...

  5. sql 删除重复数据 只保留一条

    oracle 删除重复数据 只保留一条 DELETE from t_ows_compelete_rfc WHERE operation_no is null IN ( SELECT operation ...

  6. mysql 删除重复数据 保留一个_MySQL学习笔记-删除重复数据只保留一条

    有这样一张表,表数据及结果如下: 可以看出,school_name的字段值有重复数据(Abraham Lincoln High School 和Agoura High School分别出现两次),那么 ...

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

    MySQL删除重复数据并保留最新的一条,网上有些博客写的有问题,因为他们只考虑到或者说他们的重复数据最多只有两条,当重复数据大于2时,就会出现问题. 案例描述: 按天删除表中重复数据只保留最新的一条( ...

  8. MySQL 中删除重复数据只保留一条

    WechatIMG256.jpeg 场景 在许多条记录里,存在着些相同的记录,使用SQL语句,删除掉重复项只保留一条. 数据模型 half_demon 半妖表 id name weapon skill ...

  9. MySQL中删除重复数据只保留一条

    用SQL语句,删除掉重复项只保留一条 在几千条记录里,存在着些相同的记录,如何能用SQL语句,删除掉重复的呢 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 SELECT ...

最新文章

  1. Python:读取两种Word文件简述及文件未能引发事件错误
  2. NASM学习之Windows下编写16位程序
  3. 标题与文字的组合[摘]
  4. 如何使用 Docker 部署一个基于 Play Framework 的 Scala Web 应用?
  5. stl algorithm -- sort ,unique
  6. [php]php设计模式 Facade(外观模式)
  7. mysql源码目录在哪_Mysql源码学习——源码目录结构
  8. python--- 之The program 'python' can be found in the following packages: * python-minimal * python3
  9. 信标链 分片链 是什么?
  10. R-CNN解读+代码梳理
  11. Mybatis整合达梦数据库
  12. kubernetes 非安全部署
  13. python脚本报错-qt.qpa.plugin: Could not load the Qt platform plugin “xcb“
  14. 基于嵌入式技术的智能灌溉系统设计与实现
  15. nodejs免安装版安装
  16. 《卓有成效的管理者》——学习心得(六)
  17. RK3228H开发之Android开发
  18. python收益风险点图_使用python matploblib库绘制准确率,损失率折线图
  19. Python:批量把这些好看的图片保存到本地,爱了吗?
  20. uniapp 点击按钮跳转到当前应用的App Store中

热门文章

  1. 算法设计与分析 SCAU17089 最大m子段和
  2. Vue中使用mxgraph开发流程图工具
  3. matlab异常检测
  4. 关于相机景深学习笔记
  5. while和switch循环如何使用
  6. 120 行代码帮你了解 Webpack 下的 HMR 机制
  7. 蓝桥杯 算法训练 乘积最大(动态规划)
  8. 金蝶K3批量禁用物料的语句
  9. miniconda安装和配置
  10. 如何搞生产?<[公司文件] 从系统工程角度出发规划华为大生产体系架构,建设世界一流的先进生产系统——任总在松山湖工厂沟通纪要>[转]