Navicat使用教程:如何用非唯一键识别重复项

本篇文章介绍了如何用非唯一键识别重复项。

下载Navicat Premium最新版本

Navicat Premium是一个可连接多种数据库的管理工具,它可以让你以单一程序同时连接到MySQL、Oracle及PostgreSQL数据库,让管理不同类型的数据库更加的方便。

大多数重复记录分为两类:重复意义和非唯一键。在MySQL文章中,如何识别和删除具有重复意义的值涉及到重复意义;在这篇文章中,我们将讨论如何识别非唯一键。这意味着同一表中的两个记录具有相同的键,但可能具有或不具有不同的值和含义。

Navicat

形成机制

即使是设计良好的数据库也可以累积非唯一的键重复。它通常是从外部源(如文本、csv或excel文件)以及数据源导入数据的结果。即使合并来自两个不同数据库的数据,如果您以某种方式组合每个数据库以生成一个新的键,也可能会创建重复的键——当然,假设新的键列支持非唯一值。例如,连接两个数字以生成一个新密钥可能会有问题:

Key 1   Key 2   New Key--------------------------1025102510251025 !!!

示例表

在支持复杂系统的数据库中,防止出现重复键并不总是可行的。重要的是能够在它们污染您的数据之前快速有效地处理它们。

让我们首先从重叠键中分离出真正的重复值。

这是合并两个参与者数据源的结果。你会注意到有几个重复的名字,特别是“JENNIFER DAVIS”和“NICK WAHLBERG”:

id    first_name    last_name--------------------------------------10PENELOPEGUINESS12NICKWAHLBERG14EDCHASE22JENNIFERDAVIS23JOHNNYLOLLOBRIGIDA27BETTENICHOLSON34GRACEMOSTEL41NICKWAHLBERG39JOESWANK23CHRISTIANGABLE22JENNIFERDAVIS

Nick Walberg是我们在上篇文章中探讨过的意义重复的例子。另一方面, JENNIFER DAVIS也出现在两张唱片中,同一个键是22。还有一个与两个无关的演员相关联的复制键:“JOHNNY LOLLOBRIGIDA”和“CHRISTIAN GABLE”的复制键#23。对于22和23的重复键,第一个键是真正的重复键,而第二个键只需要为其中一个记录生成一个新键。

识别和计数重复项

下面的查询将标识上表中共享公共ID的所有记录。建议使用MySQL group_concat()函数在一行中将重复的行格式化在一起:

SELECT  COUNT(*) as repetitions,  group_concat(id, ' (', last_name, ', ', first_name, ') ' SEPARATOR ' | ')    as row_dataFROM amalgamated_actorsGROUP BY idHAVING repetitions > 1;Repetitions    row_data-------------------------------------------------------------222 (DAVIS, JENNIFER) | 22 (DAVIS, JENNIFER)223 (LOLLOBRIGIDA, JOHNNY) | 23 (GABLE, CHRISTIAN)

如果希望同时查找所有重复项(即重复含义和非唯一键重复项),可以将上述查询与使用UNION运算符检查重复名称的查询结合起来:

SELECT  COUNT(*) as repetitions,  group_concat(id, ' (', last_name, ', ', first_name, ') ' SEPARATOR ' | ')    as row_dataFROM amalgamated_actorsGROUP BY idHAVING repetitions > 1UNIONSELECT  COUNT(*) as repetitions,  group_concat(id, ' (', last_name, ', ', first_name, ') ' SEPARATOR ' | ')    as row_dataFROM amalgamated_actorsGROUP BY last_name, first_nameHAVING repetitions > 1;

突出显示一个结果集中的所有重复项:

Repetitions    row_data-------------------------------------------------------------222 (DAVIS, JENNIFER) | 22 (DAVIS, JENNIFER)223 (LOLLOBRIGIDA, JOHNNY) | 23 (GABLE, CHRISTIAN)241 (WAHLBERG, NICK) | 12 (WAHLBERG, NICK)

结论

在MySQL中创建一个查询来标识重复的键相对简单,因为您只需要在键字段上分组,并包含“Having COUNT(*) > 1”子句。以后的文章将回顾一些删除重复行和更新键的不同方法。

购买Navicat Premium正版授权,请点击“咨询在线客服”哟!

PyCharm

标签:数据库mysqloracle

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年1月27日
下一篇 2019年1月27日

相关推荐

发表回复

登录后才能评论