MySQL中查询和删除重复行
关于MySQL中的重复行
- 1、重复行的定义
- 2、单字段重复
- 2.1、查询重复记录
- 2.2、删除多余行
- 3、多字段重复
- 3.1、查询重复记录
- 3.2、删除多余行
- 4、小结
1、重复行的定义
在不同的业务场景中,可能我们对重复行的定义不一样,比如以下的表记录:
在某些场景下,我们把name字段重复的记录称为重复行,而在另一些场景下,我们把name和address都重复的记录称为重复行,或者把name,sex,birth,address这4个字段都重复的记录称为重复行,具体可区分为两大类:单字段重复和多字段重复,无论是哪一种,我们的目的都是将重复的记录找出来,然后删除掉多余的,只保留一行,这是我们的最终目的。
2、单字段重复
这种某一个字段重复的情况很简单,我们只需要将这个字段用group by进行分组,然后用count聚合函数和having子句进行过滤就行了。
2.1、查询重复记录
还是以这张表为例:
现在我认为name重复的记录就是重复记录,先找出重复记录,SQL语句:
SELECT*
FROM
USER
WHERENAME IN ( SELECT NAME FROM USER GROUP BY NAME HAVING count(*) > 1 );
查询结果:
结果是没问题的,OK,找出重复记录后的下一步是删除多余记录,只保留其中一条。
2.2、删除多余行
因为删除是按主键Id来进行删除的,修改上面的SQL语句:
SELECTmin( id )
FROM
USER
WHERENAME IN ( SELECT NAME FROM USER GROUP BY NAME HAVING count(*) > 1 )
GROUP BY
NAME;
查询结果:
可以考虑用min(id)来进行筛选,保留重复记录最小id对应的记录,其余重复的删掉。
SELECTmin( id )
FROM
USER
GROUP BY
NAME;
刚好重复的几条记录的id都不在结果集中,那么最终的删除语句为:
DELETE
FROM
USER
WHEREid NOT IN ( SELECT tmp.mid FROM ( SELECT min( id ) mid FROM USER GROUP BY NAME ) tmp );
执行完毕后的表记录:
name字段重复的记录只保留下了id最小的一条,其余重复的删掉了。
3、多字段重复
先补充一下表记录:
3.1、查询重复记录
现在我认为name,sex和address都相同的记录才是重复的,那么先查询出来:
SELECT*
FROM
USER
WHERE( NAME, sex, address ) IN (SELECT NAME,sex,address FROMUSER GROUP BYNAME,sex,address HAVINGcount(*) > 1 );
查询结果:
结果没问题。
3.2、删除多余行
还是使用min(id)来筛选,先查询:
SELECTmin( id )
FROM
USER
GROUP BYNAME,sex,address
然后删除,最终语句:
DELETE
FROM
USER
WHEREid NOT IN ( SELECT tmp.mid FROM ( SELECT min( id ) mid FROM USER GROUP BY NAME, sex, address ) tmp );
执行后的表记录:
可以看到,name、sex、address都相同的重复记录只保留了一条,其余多的删掉了。
4、小结
重复记录的定义不同,可根据具体业务场景来进行筛选删除,无论是单字段还是多字段重复,大体思路都一样,借助min(id)或max(id)来辅助筛选删除。
MySQL中查询和删除重复行相关推荐
- MySQL中查询、删除重复记录的方法大全
查找所有重复标题的记录: select title,count(*) as count from user_table group by title having count>1; SELECT ...
- mysql删除重复文章标题_MySQL中查询、删除重复记录的方法大全
前言 本文主要给大家介绍了关于MySQL中查询.删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: 一.查找重复记录 1.查找全部重复记录 2.过滤重复记录( ...
- mysql删除重复的判断_MySQL中查询、删除重复记录一共有多少种方法?
前言 本文主要给大家介绍了关于MySQL中查询.删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: select title,count(*) as coun ...
- mysql去掉两个最高分_MySQL中查询、删除重复记录的方法大全
前言 本文主要给大家介绍了关于MySQL中查询.删除重复记录的方法,分享出来供大家参考学习,下面来看看详细的介绍: 查找所有重复标题的记录: select title,count(*) as coun ...
- MySQL 如何查找并删除重复行
如何查找重复行 第一步是定义什么样的行才是重复行.多数情况下很简单:它们某一列具有相同的值.本文采用这一定义,或许你对"重复"的定义比这复杂,你需要对sql做些修改.本文要用到的数 ...
- MySQL的查询及删除重复记录
查询及删除重复记录的方法 (一) 1.查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断 select * from people where peopleId in (sele ...
- Mysql中查找并删除重复数据的方法
(一)单个字段 1.查找表中多余的重复记录,根据(question_title)字段来判断 代码如下 复制代码 select * from questions where question_title ...
- 温故知新MySQL--如何在MySQL表中删除重复行
2019独角兽企业重金招聘Python工程师标准>>> 如何在MySQL表中删除重复行 在实际应用中,会有需要删除重复数据的场景.这里简单介绍下如何删除重复的数据 1. 准备数据 C ...
- mysql group by 去除重复_mysql中distinct和group by过滤删除重复行
下面先来看看例子: 代码如下 table id name 1 a 2 b 3 c 4 c 5 b 库结构大概这样,这只是一个简单的例子,实际情况会复杂得多. 比如我想用一条语句查询得到name不重复的 ...
最新文章
- Linuxnbsp;rpmnbsp;命令参数使用…
- sql 中的导航函数 FIRST_VALUE, LAST_VALUE
- 如何编写高性能的C#代码(二)
- Spring IOC 和 AOP 概览
- Java正成为COBOL的一部分-它将成为COBOL的一部分吗?
- PWN-PRACTICE-BUUCTF-25
- 5G(3)---5G NR协议栈及功能2 - MAC RLC PDCP SDAP
- oc总结 --oc基础语法相关知识
- 学习嵌入式和单片机有没有必要,价值体现在哪
- 大型企业网络构建之网关冗余
- Linux下ffmpeg批量转换图片
- 服务器代码review要点
- 纸黄金投资之道――积小胜为大胜(就是别贪)
- 《一件小事.呐喊》--鲁迅 词语解释
- 分布式系统下的幂等性问题如何解决?
- 2022年全球市场旋转压片机总体规模、主要生产商、主要地区、产品和应用细分研究报告
- 微信支付服务器system error,微信企业支付--遇到不明确结果的err_code:SYSTEMERROR,NOT_FOUND...
- niit考试题库计算机英语翻译,NIIT SM2-MT1模拟试题 HELP KEY
- JAVA消息(第一篇)JMS 很重要!!!!包教包会!!不闹!!!下一篇-AMQP(wire-level protocol)
- Cadence IC 617 虚拟机安装使用说明
热门文章
- 全行业聚合支付平台接口_各类API聚合支付平台
- 计算机网络浅知识[ 3 ]:IP世界的基本构成
- Haskell函数式编程学习笔记
- 导出excel时,数字过长怎么解决
- UML的九种图+包图
- 白话完全解析动态规划原理及相关问题(二)
- 2021世界燕窝展|上海滋补品展谈燕窝可以提高人体的免疫力?
- 泰课在线 秘密行动课程
- 高薪就业面试题系列 人事篇三
- springboot Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory