access在单个表中查,编辑,删除重复数据
Access查、删除重复数据
本⽂介绍了如何使⽤Access 来查、删除重复数据。⼀般说来,您应当尽可能删除重复的值以降低成本并提⾼数据准确性。Access提供了多种⽅法来查、删除重复值,本⽂介绍了如何使⽤最常见的⽅法来执⾏这些操作。
⼀、了解重复数据
使⽤关系数据库的⼀个主要原因就是为了避免重复数据。但是,随着数据库存在时间的延长,常常会出现重复的值,尤其是当有多个⽤户输⼊数据时更容易出现这种情况。通常,删除重复数据可以节省存储费⽤,并使数据保持较⾼的准确性。这种⾼准确性反过来⼜可以帮助您做出更好的业务决策。例如,如果您多次输⼊同⼀份销售订单,则客户可能会收到不需要的货物,这种重复发货将增加运货成本和会计成本,从⽽造成浪费。
1、重复的真正含义
在您采取措施标识和删除重复记录之前,请记住:您需要依赖您的数据知识。与设计数据库的过程不同,您⽆法遵循⼀组特定的规则或过程来精确地查和删除重复记录。在执⾏操作时,请记住⼀点:数据库查
询可能会返回看似重复的记录,但实际上这些结果都是有效数据。如果您未在查询中包括唯⼀标识每条记录的字段,就常常会发⽣这种表⾯上的重复。有关如何在查询中包括必要的字段并避免出现误报的详细信息,请参阅本⽂后⾯的了解在什么情况下记录不是重复记录⼀节。
此外,您还必须记住:并⾮所有重复数据都可以删除,因为有些重复是数据库正常⼯作所必需的。换句话说,数据库可能既包含必要的冗余,也包含不必要的冗余,⽽您只希望删除不必要的冗余。
必要的冗余通常分为两类。第⼀类冗余确保数据库可以正常⼯作。例如,⽆论何时在表
之间建⽴⼀对多或多对多关系,都需要重复主键字段中的数据。
第⼆类必要冗余是在使⽤数据库的过程中产⽣的。例如,您可能会多次输⼊某个城市或供应商的名称,或多次输⼊某个常见⼈名(如John Smith)。如果出现这种情况,则可以放⼼使⽤这些重复数据,因为数据库中的其他字段(例如主键值、地址和)将包含⾜够多的唯⼀信息来将这些记录排除在重复记录之外。
不必要的冗余可能以多种形式出现:
两条或更多条记录包含重复字段。即使并⾮两条记录中的所有字段都包含匹配值,这两条记录也可能被视为重复记录。例如,在下图中,您将看到Antonio Moreno Taqueria 的两条记录。
即使每条记录都具有唯⼀的客户ID(最左侧列中的值),“名称”、“地址”和“城市”字段中的值仍有可能相同。在这种情况下,即使只有部分匹配,您仍有必要应⽤您的业务知识判断记录是否为重复记录。
两个或更多个表可以包含类似数据。例如,您可能发现“顾客”表和“客户”表中包含相同客户的记录。
⼿动⽐较数据库并不是⼀件容易的事,即使是很⼩的数据库也是如此。
注释如果您采取措施删除表中的重复数据后仍然发现窗体或报表中有重复的数据,则可能是由于窗体或报表设计错误造成的。请确保基础表与查询之间的连接正确,并且窗体或报表部分所包含的、绑定到同⼀个控件来源的控件不超过⼀个。
2、了解在什么情况下记录不是重复记录
在某些情况下,例如查看查询所返回的数据时,即使基础表看起来仅包含唯⼀记录,您仍可能会看到看似重复的记录。如果您的视图不包括唯⼀标识记录的字段,则可能会出现问题。例如,下图显⽰了查询返回的数据。
在该视图中,有多条记录显⽰为重复记录。如果您为查询添加⼀个或多个其他字段,例如客户名称或每份订单的主键字段(订单ID),您会发现实际上每条记录都是唯⼀的,如下图所⽰:
创建查询时,通常应包括⼀个或多个能唯⼀标识每条记录的字段。通常,主键字段就能够实现该功能,但您也可以改⽤其他字段的组合。例如,假设某个常见联系⼈姓名或某个城市名出现多处,但如果您包括了电话号码和地址,则这种数据组合将使每条记录都具有唯⼀性。
3、处理重复数据时需要考虑的因素
1)处理重复记录的⽅式取决于以下⼏个因素:
重复的性质和范围您只是在单个表中发现重复数据,还是发现两个相似的表(位于同⼀数据库或位于两个不同的数据库)中包含重叠数据?或者,您是否在基于两个或更多个相关表的视图中发现重复记录?
您的特定需求您希望如何处理重复数据?您希望从数据库中删除重复记录,还是仅在视图中隐藏它们?或者,您是否希望对重复记录中的值进⾏计数、计算平均值或汇总?您是否需要考虑删除或隐藏哪些重
复记录?如果是,您希望⼿动查看并删除这些记录,还是基于某个条件删除这些记录?在开始删除记录之前,您是否还希望更新或合并⼀条或多条记录?
通过回答上述问题(或类似的问题),再加上您的数据知识,就可以制定⼀份处理冗余数据的计划。
2)删除重复数据的常规准备⼯作
如果您选择删除重复记录,则必须先处理所有现有的表关系。通常,⼤部分数据库都使⽤⼀对多关系。例如,您的客户可能⽐较少,但每个客户下的订单⾮常多。因此,客户数据表位于关系的“⼀”端,⽽订单数据位于关系的“多”端。
在进⾏操作时请记住以下规则:如果要删除的数据位于关系的“多”端,则可以直接删除数据⽽⽆需执⾏其他步骤。但如果要删除的数据位于“⼀”端,则必须在关系中设置⼀个属性,否则,Access 将禁⽌删除。
开始删除冗余数据之前,请考虑采⽤下⾯的⼀种或多种⽅法来准备数据库:
确保数据库不是只读数据库。
确保您具有编辑或删除数据库中的记录的必要权限。
请求数据库的所有其他⽤户关闭您要处理的对象。这有助于避免锁定冲突。
提⽰如果有⼤量⽤户连接到该数据库,您可能需要关闭该数据库,然后以独占模式将它
重新打开。
删除记录之前请备份数据库。您不能取消或撤消删除操作。恢复已删除记录的唯⼀⽅法是从备份中恢复。删除操作还可能会删除相关表中的记录,因此在开始删除操作之前最好先备份整个数据库。
⼆、在单个表中查和编辑、隐藏或删除重复数据
以下各节中的步骤介绍了在单个表中查和编辑、隐藏或删除重复值的最常见⽅法。
1、查其中某些字段全部或部分匹配的记录
查包含全部或部分匹配值的记录的过程包括以下主要步骤:
使⽤“查重复项查询向导”创建⼀个查询。默认情况下,仅当每个字段中的值完全相同时,查询才会返回重复记录。如果需要查各记录部分字段重复项,可以在查询中使⽤⼀个表达式,也可以更改结构化查询语⾔(SQL) 代码。
本节中的步骤介绍了如何创建重复项查询,以及如何更改查询来查部分匹配项。这些步骤将使⽤⽰例中提供的“顾客”表,查“公司名称”相同的记录(⽰例中查询“使⽤查重复项查询向导查重复项”)。
创建重复项查询
1)在“新建查询”对话框中,单击“查重复项查询向导”,然后单击“确定”。
如果显⽰提⽰消息通知您未安装此功能,请单击“是”安装该向导。
2)在表列表中,选择“顾客”表,然后单击“下⼀步”。
3)在可⽤字段列表中,仅选择包含重复信息的字段:“公司名称”、“地址”和“城市”字段,因为只有这些字段包含完全匹配(逐个字符⽐较)的值。单击“下⼀步”。
注释如果在此步骤中添加的字段不包含完全匹配(逐个字符⽐较)的值,则查询可能不会返回任何结果。
4)在下⼀个可⽤字段列表中,选择包含要检查或更新的字段,或选择包含有助于您区分重复记录和⾮重复记录的数据的字段。⽰例中添加“联系⼈姓名”和“移动电话”字段,因为这两个字段中的数据可以帮助您查重复值,并且可能指出输⼊这些值的原因。单击“下⼀步”。
5)输⼊查询名称,然后单击“完成”运⾏查询。您将看到以下结果:
您在查阅“顾客”表时,可能已经注意到有两条以上的公司名称重复的记录(该表包含4 条)。您没有看到其他重复记录是因
为“地址”字段中的值不完全匹配(逐个字符⽐较)。您可以修改查询,以返回部分匹配的值。下⼀组步骤将介绍如何修改查询。
⾃定义查询以查部分匹配项
1)将上⾯创建的查询切换到SQL 视图。您将看到以下SQL 语句:
SELECT 顾客.公司名称, 顾客.地址, 顾客.城市, 顾客.联系⼈姓名, 顾客.移动电话
FROM 顾客
WHERE (((顾客.公司名称) In (SELECT [公司名称] FROM [顾客] As Tmp GROUP BY [公司名称],[地址],[城市] HAVING Count(*)>1 And [地址] = [顾客].[地址] And [城市] = [顾客].[城市])))
ORDER BY 顾客.公司名称, 顾客.地址, 顾客.城市;
2)修改SQL 代码以查和⽐较部分值。
在本例中,WHERE ⼦句使⽤另⼀个SELECT 语句对照表中的其他所有记录来⽐较每条记录,以确定重复项集合。
假定您需要修改“地址”字段以返回部分匹配项。下表显⽰了如何修改该语句,以便只须匹配字段中的前七个字符。修改内容以红⾊显⽰:
SELECT 顾客.公司名称, 顾客.地址, 顾客.城市, 顾客.联系⼈姓名, 顾客.移动电话
FROM 顾客
WHERE (((顾客.公司名称) In (SELECT [公司名称] FROM [顾客] As Tmp GROUP BY
[公司名称],left([地址],7),[城市] HAVING Count(*)>1 And left([地址],7) = left([顾客].[地址],7) And [城市] = [顾客].[城市]))) ORDER BY 顾客.公司名称, 顾客.地址, 顾客.城市;
修改完语句后,单击“运⾏”以运⾏查询并在数据表视图中显⽰结果。
现在,查询将返回全部四条重复记录,因为现在只需匹配“地址”字段中的前7 个字符(从左边开始):
2、⼿动编辑记录
在数据表视图中打开在上⾯的步骤中创建的查询。
请执⾏下列操作之⼀:
要编辑某个字段中的值,请选择该字段并输⼊新值。
要删除整条记录(⼀⾏),请单击⾏选择器(⾏旁边的空框)并按Delete。
注释如果到⼤量重复记录(以致于您⽆法⼿动删除),可以通过创建并运⾏⼀个删除查询来删除这些记录。有关创建并运⾏删除查询所涉及的基本步骤,请参阅本⽂后⾯的使⽤删除查询删除重复记录⼀节。
3、显⽰唯⼀记录
⼤部分数据库表都包含⼀个唯⼀标识每条记录的字段,该字段通常为主键字段。如果您在设计查询时隐藏或省略这些类型的字段,可能会看到看似重复的记录,因为所有返回字段中的值都是匹配的。
例如,下图显⽰的查询结果中有两份订单(位于红⾊框中)看起来是重复的。
但是,如果查询包括了主键字段(例如订单ID)或能够唯⼀标识每条记录的其他字段(例如发货⽇期),您会发现这些记录并⾮重复记录。本节将介绍如何隐藏查询返回的所有字段中的值均匹配的重复记录。
执⾏操作时,请记住以下规则:只有当查询结果中的所有字段均包含相同的值时,才会将两条或多条记录视为重复记录。即使有⼀个字段中的值不同,每条记录也将是唯⼀记录,因此您不能使⽤此处介绍的⽅法隐藏这些记录。如果要隐藏这些类型的重复记录,可以将总计查询与聚合函数(例如FIRST、MIN、MAX 等等)⼀起使⽤。有关执⾏此操作的信息,请参阅本⽂后⾯通过指定在结果中显⽰哪些重复记录来显⽰不同的记录⼀节。
Access 提供了在查询结果集中显⽰唯⼀值的⽅法:
access常见条件表达式
设置“唯⼀值”属性
注释将查询的“唯⼀值”属性设置为“是”后,如果查询处于数据表视图,则您不能编辑字段值或删除数据。要编辑或删除数据,请在数据表视图中打开基础表。
单击“运⾏”以运⾏查询并在数据表视图中显⽰结果。如果数据包含重复记录,将仅显⽰这些记录中的⼀条。
4、通过指定在结果中显⽰哪些重复记录来显⽰不同的记录
当有重复记录时,您可能只希望看到不同的值,即:仅显⽰每组重复记录中的⼀条记录。要查询某条特定的重复记录,可以使⽤⼀种称为总计查询的查询。向总计查询添加字段时,查询会将每个字段视为⼀个组,并且您可以针对组中的数据运⾏⼀类称为聚合函数的函数。这些函数反过来⼜可以从⼀组重复记录中返回⼀条记录。
您可以通过多种⽅法对这些数据使⽤总计查询和聚合函数:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。