千家信息网

MySQL如何去重

发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,这篇文章主要介绍了MySQL如何去重,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。需求分析数据库中存在重复记录,删除保留其中一条(是否
千家信息网最后更新 2024年11月11日MySQL如何去重

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

需求分析

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

解决方案

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

找人帮忙

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

自己百度

找到了一条sql语句:

DELETEFROM vitae aWHERE (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语句,贴一下代码和运行结果:

完美的【去重留一】SQL

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

DELETE consum_recordFROM consum_record,  (  SELECT   min(id) id,   user_id,   monetary,   consume_time  FROM   consum_record  GROUP BY   user_id,   monetary,   consume_time  HAVING   count(*) > 1 ) t2WHERE consum_record.user_id = t2.user_id  and consum_record.monetary = t2.monetary and consum_record.consume_time = t2.consume_timeAND 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如何去重"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

语句 数据 篇文章 查询 代码 条件 运行 最小 思路 时候 需求 复杂 厉害 可以通过 同时 基准 字段 无奈 结果 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 加强美国网络安全与能力 梦幻西游如何预约新服务器 苹果手机出现联接服务器出错 不能在安全服务器上玩游戏的可能 webdev服务器地址 闽侯县检察院网络安全 产品的软件开发材料 广州软件开发招生 信阳付费软件开发 江苏5g服务器机柜哪家好 服务器声音怎么调 做软件开发必须intel吗 马云针对互联网科技的语录 数据库中间件证书 数据库大小写关闭 深圳企学宝内训软件开发 网络安全木马病毒论文 上海嘉定网络技术公司招聘 欧拉服务器系统官网下载 一般APPios怎么切换服务器 我的世界流浪地球服务器视频 c 软件开发工资 智能光网络技术研发中心 数据库按月查询商品销售数量 正规的浪潮服务器服务商电话 美国和中国网络安全对比 华为服务器的网卡怎么查询 河南大学软件开发分数线 数据库中表间的联系有哪几种 山东系统软件开发怎么样
0