阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

运维人员该如何查找并删除数据库中的重复行?

387次阅读
没有评论

共计 2098 个字符,预计需要花费 6 分钟才能阅读完成。

今天小编要跟大家分享的文章是关于运维人员该如何 查找并删除数据库中的重复行 。本文讲述如何查找数据库里重复的行。这是初学者十分普遍遇到的问题。方法也很简单。这个问题还可以有其他演变,例如,如何查找“两字段重复的行”。Linux 入门 新手和正在 Linux 学习 的小伙伴快来看一看吧,希望能够对大家有所帮助!

1、如何查找重复行

第一步是定义什么样的行才是重复行。多数情况下很简单:它们某一列具有相同的值。本文采用这一定义,或许你对“重复”的定义比这复杂,你需要对 sql 做些修改。本文要用到的数据样本:

运维人员该如何查找并删除数据库中的重复行?

前面两行在 day 字段具有相同的值,因此如何我将他们当做重复行,这里有一查询语句可以查找。查询语句使用 GROUP BY 子句把具有相同字段值的行归为一组,然后计算组的大小。

运维人员该如何查找并删除数据库中的重复行?

重复行的组大小大于 1。如何希望只显示重复行,必须使用 HAVING 子句,比如

运维人员该如何查找并删除数据库中的重复行?

这是基本的技巧:根据具有相同值的字段分组,然后知显示大小大于 1 的组。

为什么不能使用 WHERE 子句?因为 WHERE 子句过滤的是分组之前的行,HAVING 子句过滤的是分组之后的行。

2、如何删除重复行

一个相关的问题是如何删除重复行。一个常见的任务是,重复行只保留一行,其他删除,然后你可以创建适当的索引,防止以后再有重复的行写入数据库。

同样,首先是弄清楚重复行的定义。你要保留的是哪一行呢?第一行,或者某个字段具有最大值的行?本文中,假设要保留的是第一行——id 字段具有最小值的行,意味着你要删除其他的行。

也许最简单的方法是通过临时表。尤其对于 MYSQL,有些限制是不能在一个查询语句中 select 的同时 update 一个表。简单起见,这里只用到了临时表的方法。

我们的任务是:删除所有重复行,除了分组中 id 字段具有最小值的行。因此,需要找出大小大于 1 的分组,以及希望保留的行。你可以使用 MIN()函数。这里的语句是创建临时表,以及查找需要用 DELETE 删除的行。

运维人员该如何查找并删除数据库中的重复行?

有了这些数据,你可以开始删除“脏数据”行了。可以有几种方法,各有优劣(详见我的文章 many-to-one problems in SQL),但这里不做详细比较,只是说明在支持查询子句的关系数据库中,使用的标准方法。

运维人员该如何查找并删除数据库中的重复行?

3、如何查找多列上的重复行

有人最近问到这样的问题:我的一个表上有两个字段 b 和 c,分别关联到其他两个表的 b 和 c 字段。我想要找出在 b 字段或者 c 字段上具有重复值的行。

咋看很难明白,通过对话后我理解了:他想要对 b 和 c 分别创建 unique 索引。如上所述,查找在某一字段上具有重复值的行很简单,只要用 group 分组,然后计算组的大小。并且查找全部字段重复的行也很简单,只要把所有字段放到 group 子句。但如果是判断 b 字段重复或者 c 字段重复,问题困难得多。这里提问者用到的样本数据

运维人员该如何查找并删除数据库中的重复行?

现在,你可以轻易看到表里面有一些重复的行,但找不到两行具有相同的二元组{b, c}。这就是为什么问题会变得困难了。

错误的查询语句

如果把两列放在一起分组,你会得到不同的结果,具体看如何分组和计算大小。提问者恰恰是困在了这里。有时候查询语句找到一些重复行却漏了其他的。这是他用到了查询  

运维人员该如何查找并删除数据库中的重复行?

结果返回所有的行,因为 CONT(*)总是 1. 为什么?因为 >1 写在 COUNT()里面。这个错误很容易被忽略,事实上等效于

运维人员该如何查找并删除数据库中的重复行?

为什么?因为 (b > 1) 是一个布尔值,根本不是你想要的结果。你要的是

运维人员该如何查找并删除数据库中的重复行?

返回空结果。很显然,因为没有重复的{b,c}。这人试了很多其他的 OR 和 AND 的组合,用来分组的是一个字段,计算大小的是另一个字段,像这样

运维人员该如何查找并删除数据库中的重复行?

没有一个能够找出全部的重复行。而且最令人沮丧的是,对于某些情况,这种语句是有效的,如果错误地以为就是这么写法,然而对于另外的情况,很可能得到错误结果。

事实上,单纯用 GROUP BY 是不可行的。为什么?因为当你对某一字段使用 group by 时,就会把另一字段的值分散到不同的分组里。对这些字段排序可以看到这些效果,正如分组做的那样。首先,对 b 字段排序,看看它是如何分组的

运维人员该如何查找并删除数据库中的重复行?

当你对 b 字段排序(分组),相同值的 c 被分到不同的组,因此不能用 COUNT(DISTINCT c)来计算大小。COUNT()之类的内部函数只作用于同一个分组,对于不同分组的行就无能为力了。类似,如果排序的是 c 字段,相同值的 b 也会分到不同的组,无论如何是不能达到我们的目的的。

几种正确的方法

也许最简单的方法是分别对某个字段查找重复行,然后用 UNION 拼在一起,像这样:

运维人员该如何查找并删除数据库中的重复行?

输出 what_col 字段为了提示重复的是哪个字段。另一个办法是使用嵌套查询:

运维人员该如何查找并删除数据库中的重复行?

这种方法的效率要比使用 UNION 低许多,并且显示每一重复的行,而不是重复的字段值。还有一种方法,将自己跟 group 的嵌套查询结果联表查询。写法比较复杂,但对于复杂的数据或者对效率有较高要求的情况,是很有必要的。

运维人员该如何查找并删除数据库中的重复行?

以上方法可行,我敢肯定还有其他的方法。如果 UNION 能用,我想会是最简单不过的了。

以上就是小编今天为大家分享的关于运维人员该如何查找并删除数据库中的重复行?的文章,希望本篇文章能够对正在从事运维工作的小伙伴们有所帮助。想要了解更多运维相关知识记得关注马哥 Linux 培训 官网,最后祝愿小伙伴们工作顺利!

声明:文章来源于网络,侵删!

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-12-03发表,共计2098字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7978978
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用AI做了一个1978年至2019年中国大陆企业注册的查询网站

我用 AI 做了一个 1978 年至 2019 年中国大陆企业注册的查询网站 最近星哥在 GitHub 上偶然...
在Windows系统中通过VMware安装苹果macOS15

在Windows系统中通过VMware安装苹果macOS15

在 Windows 系统中通过 VMware 安装苹果 macOS15 许多开发者和爱好者希望在 Window...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
开发者福利:免费 .frii.site 子域名,一分钟申请即用

开发者福利:免费 .frii.site 子域名,一分钟申请即用

  开发者福利:免费 .frii.site 子域名,一分钟申请即用 前言 在学习 Web 开发、部署...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站-手机博物馆-CHAZ 3D Experience

每天一个好玩的网站 - 手机博物馆 -CHAZ 3D Experience 一句话介绍:一个用 3D 方式重温...
零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face免费服务器+Docker 快速部署HertzBeat 监控平台

零成本上线!用 Hugging Face 免费服务器 +Docker 快速部署 HertzBeat 监控平台 ...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...
星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

星哥带你玩飞牛NAS-16:飞牛云NAS换桌面,fndesk图标管理神器上线!

  星哥带你玩飞牛 NAS-16:飞牛云 NAS 换桌面,fndesk 图标管理神器上线! 引言 哈...
把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地

把小米云笔记搬回家:飞牛 NAS 一键部署,小米云笔记自动同步到本地 大家好,我是星哥,今天教大家在飞牛 NA...