广告
返回顶部
首页 > 资讯 > 数据库 >MySQL如何去重
  • 121
分享到

MySQL如何去重

2024-04-02 19:04:59 121人浏览 八月长安
摘要

这篇文章主要介绍了Mysql如何去重,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。需求分析数据库中存在重复记录,删除保留其中一条(是否重复判

这篇文章主要介绍了Mysql如何去重,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

需求分析

数据库中存在重复记录,删除保留其中一条(是否重复判断基准为多个字段)

解决方案

碰到这个需求的时候,心里大概是有思路的。最快想到的是可以通过一条sql语句来解决,无奈自己对于复杂sql语句的道行太浅,所以想找大佬帮忙。

找人帮忙

因为这个需求有点着急,所以最开始想到的是,可以找这方面的同行来解决,然后分享这个问题给同事,结果这货随便百度了一下,就甩给我一个从未用过的sql语句,让我自己尝试,心里万匹那啥啥啥奔腾而过...

自己百度

找到了一条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 (
 SELECT
  min(rowid)
 FROM
  vitae
 GROUP BY
  peopleId,
  seq
 HAVING
  count(*) > 1
)

这条语句是在 【mysql中删除重复数据只保留一条】 这篇文章里找到的。这条sql思路很明显,有以下3步:

SELECT peopleId, seq FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 查询出表中重复记录作为条件

SELECT min(rowid) FROM vitae GROUP BY peopleId, seq HAVING count(*) > 1 查询出表中重复记录中ID最小的值为第二个条件

最后根据以上两个条件,删除 重复记录中最小ID的其余重复记录

但是很无奈的是,运行这条语句出现了错误,大致报错意思是,不能在查询的时候同时更新这个表。

代码解决

根据上面这个sql语句想到或许可以通过代码的方式,两步来达到同样的目的:

先取出重复的数据集

根据查询到的数据集,循环删除其余的重复数据

想法是有了,写出来也很快,但是一运行吓我一跳,竟然需要 116s 左右,然后自己就想一定要找到可以使用的sql语句,贴一下代码和运行结果:

MySQL如何去重

MySQL如何去重

完美的【去重留一】SQL

最后在一个技术群里得到了完美的答案,看这条sql语句:

DELETE consum_record
FROM
 consum_record, 
 (
  SELECT
   min(id) id,
   user_id,
   monetary,
   consume_time
  FROM
   consum_record
  GROUP BY
   user_id,
   monetary,
   consume_time
  HAVING
   count(*) > 1
 ) t2
WHERE
 consum_record.user_id = t2.user_id 
 and consum_record.monetary = t2.monetary
 and consum_record.consume_time = t2.consume_time
AND consum_record.id > t2.id;

上面这条sql语句,仔细看一下,揣摩出思路也不难,大概也分为3步来理解:

(SELECT min(id) id, user_id, monetary, consume_time FROM consum_record GROUP BY user_id, monetary, consume_time HAVING count(*) > 1 ) t2 查询出重复记录形成一个集合(临时表t2),集合里是每种重复记录的最小ID

consum_record.user_id = t2.user_id and consum_record.monetary = t2.monetary and consum_record.consume_time = t2.consume_time 关联 判断重复基准的字段

根据条件,删除原表中id大于t2中id的记录

看到这个语句的时候,心里想这也太厉害了。这么一个简单的sql语句,竟然可以解决这么复杂的问题,涨姿势了~

运行起来也超级快,原先的代码循环执行,需要 116s 左右,而这里 0.3s 就可以了,厉害了~

MySQL如何去重

感谢你能够认真阅读完这篇文章,希望小编分享的“MySQL如何去重”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网数据库频道,更多相关知识等着你来学习!

您可能感兴趣的文档:

--结束END--

本文标题: MySQL如何去重

本文链接: https://www.lsjlt.com/news/57634.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

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

下载Word文档
猜你喜欢
  • MySQL如何去重
    这篇文章主要介绍了MySQL如何去重,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。需求分析数据库中存在重复记录,删除保留其中一条(是否重复判...
    99+
    2022-10-18
  • 如何将MySQL去重
    这篇文章给大家分享的是有关如何将MySQL去重的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。•问题提出源表t_source结构如下:item_id int,  ...
    99+
    2022-10-18
  • mysql如何按某列去重
    使用DISTINCT关键字可以按某列去重。例如,假设有一个名为table_name的表,其中有一列为column_name,可以使用...
    99+
    2023-08-30
    mysql
  • mysql如何去除重复项
    这篇文章给大家分享的是有关mysql如何去除重复项的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体如下:说到这个去重,脑仁不禁得一疼,尤其是出具量比较大的时候。毕竟咱不是专业的...
    99+
    2022-10-18
  • mysql如何去掉重复记录
    这篇文章主要介绍“mysql如何去掉重复记录”,在日常操作中,相信很多人在mysql如何去掉重复记录问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”mysql如何去掉重复记录”...
    99+
    2023-02-28
    mysql
  • mysql 去重留一
    首先先分析一下 我们现在的目的 是 查询到这俩张表的所有数据 然后进行删除重复记录 每条数据只保留一条 第一步: 查询以下俩张表的重复记录 (关键字段重复>1) ks_examcity 、 ks...
    99+
    2022-10-18
  • 如何合并去重MySQL数据表
    这篇文章将为大家详细讲解有关如何合并去重MySQL数据表,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。场景:爬取的数据生成数据表,结构与另一个主表相同,需要...
    99+
    2022-10-18
  • mysql如何去掉重复的数据
    这篇文章给大家分享的是有关mysql如何去掉重复的数据的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 在mysql中,可以利用“SELECT”...
    99+
    2022-10-19
  • Mysql 数据库去重(distinct)
    有时需要查询出某个字段不重复的记录,这时可以使用mysql提供的distinct这个关键字来过滤重复的记录,但是实际中我们往往用distinct来返回不重复字段的条数(count(distinct id)),其原因是distinct只能返回...
    99+
    2023-10-24
    数据库 mysql
  • Mysql 多字段去重 【转】
    现在有如下表 id name age 1 张三 23 2 李四 34 3 张三 23 4 李四 ...
    99+
    2014-09-24
    Mysql 多字段去重 【转】
  • MySQL怎么去重数据
    本篇内容主要讲解“MySQL怎么去重数据”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL怎么去重数据”吧!查询 tb_students_info 表中所...
    99+
    2022-10-18
  • MySql 部分字段去重
    select * from personal_question_answer where answer_id in (   select min(answer_id) from personal_q...
    99+
    2018-06-22
    MySql 部分字段去重
  • JavaScript如何去重
    这篇文章将为大家详细讲解有关JavaScript如何去重,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。去重1.终极篇Array.from(new Set([1,...
    99+
    2022-10-19
  • 数据库去重(MYSQL和ORACLE)
    一、数据库中的去重操作(删除数据库中重复记录的SQL语句)主要有三种方法 (1)、rowid方法 (2)、group by 方法 (3)、distinct方法 1、用rowid方法 根据Oracle带的rowid属性,可以进行判断是否存在...
    99+
    2023-09-12
    数据库 oracle
  • mysql中distinct去重的方法
    mysql中distinct去重的方法:1.打开运行窗口;2.输入“cmd”打开命令行窗口;3.输入“mysql -u root -p”命令;4.再输入密码进入mysql控制台;5.通过"SELECT disti...
    99+
    2022-10-07
  • mysql中使用distinct如何去除重复记录
    下面一起来了解下mysql中使用distinct如何去除重复记录,相信大家看完肯定会受益匪浅,文字在精不在多,希望mysql中使用distinct如何去除重复记录这篇短内容是你想要的。重复的记录是指dist...
    99+
    2022-10-18
  • MySQL如何实现连表查询分组去重
    这篇文章主要介绍MySQL如何实现连表查询分组去重,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!业务逻辑通过多种渠道将小程序的活动页链接发布出去,比如通过多多种短信附带链接( channel 就记为 sms1,sms...
    99+
    2023-06-20
  • MySQL 数据查重、去重的实现语句
    有一个表user,字段分别有id、nick_name、password、email、phone。 一、单字段(nick_name) 查出所有有重复记录的所有记录 select * from user w...
    99+
    2022-05-24
    MySQL 数据查重 MySQL 数据去重
  • mysql表中重复的字段应该如何去掉
    本篇文章给大家主要讲的是关于mysql表中重复的字段应该如何去掉的内容,感兴趣的话就一起来看看这篇文章吧,相信看完mysql表中重复的字段应该如何去掉对大家多少有点参考价值吧。    &...
    99+
    2022-10-18
  • MySQL 去重实例操作详解
    目录前言1.创建测试数据2.distinct 使用2.1 单列去重2.2 多列去重2.3 聚合函数+去重3.group by 使用3.1 单列去重3.2 多列去重3.3 聚合函数 +...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作