航空论坛_航空翻译_民航英语翻译_飞行翻译

标题: 查找、隐藏或删除重复数据 [打印本页]

作者: 帅哥    时间: 2009-11-10 10:29:57     标题: 查找、隐藏或删除重复数据

本文介绍了如何使用 Microsoft Office Access 2007 来查找和隐藏或删除重复数据。一般说来,您应当尽可能删除重复的值以降低成本并提高数据准确性。Office Access 2007 提供了多种方法来查找和隐藏或删除重复值,本文介绍了如何使用最常见的方法来执行这些操作。
9 x9 N  L# @9 M+ S# l: s/ _6 O! n3 y您要做什么?/ a* p# l3 d% u! [- ]9 R1 c
了解重复数据使用关系数据库的一个主要原因就是为了避免重复数据。但是,随着数据库存在时间的延长,常常会出现重复的值,尤其是当有多个用户输入数据时更容易出现这种情况。通常,删除重复数据可以节省存储费用,并使数据保持较高的准确性。这种高准确性反过来又可以帮助您做出更好的业务决策。例如,如果您多次输入同一份销售订单,则客户可能会收到不需要的货物,这种重复发货将增加运货成本和会计成本,从而造成浪费。
3 {% M1 V" ~2 ]重复的真正含义
( p! W& `- J& {" L6 _在您采取措施标识和删除重复记录之前,请记住:您需要依赖您的数据知识。与设计数据库的过程不同,您无法遵循一组特定的规则或过程来精确地查找和删除重复记录。在执行操作时,请记住一点:数据库查询可能会返回看似重复的记录,但实际上这些结果都是有效数据。如果您未在查询中包括唯一标识每条记录的字段,就常常会发生这种表面上的重复。有关如何在查询中包括必要的字段并避免出现误报的详细信息,请参阅本文后面的了解在什么情况下记录不是重复记录一节。
4 @- J2 I) G% p此外,您还必须记住:并非所有重复数据都可以删除,因为有些重复是数据库正常工作所必需的。换句话说,数据库可能既包含必要的冗余,也包含不必要的冗余,而您只希望删除不必要的冗余。
$ J1 C0 G2 i- @$ A' q; ^! @; ~/ a, T必要的冗余通常分为两类。第一类冗余确保数据库可以正常工作。例如,无论何时在表之间建立一对多或多对多关系,都需要重复主键字段中的数据。
: |- k6 A/ A; h! O  t+ D4 ^1 b3 ^  Q- C第二类必要冗余是在使用数据库的过程中产生的。例如,您可能会多次输入某个城市或供应商的名称,或多次输入某个常见人名(如 John Smith)。如果出现这种情况,则可以放心使用这些重复数据,因为数据库中的其他字段(例如主键值、地址和邮政编码)将包含足够多的唯一信息来将这些记录排除在重复记录之外。' Q* o) a0 W- v
不必要的冗余可能以多种形式出现:& j) j( n. p! U9 N  j5 G; L
注释   如果您采取措施删除表中的重复数据后仍然发现窗体或报表中有重复的数据,则可能是由于窗体或报表设计错误造成的。请确保基础表与查询之间的连接正确,并且窗体或报表部分所包含的、绑定到同一个控件来源的控件不超过一个。
- o2 x3 \) e" V0 h7 |3 B# f有关报表设计的详细信息,请参阅修改、编辑或更改报表一文。! i6 e7 p  M: C2 }' ?/ }
了解在什么情况下记录不是重复记录在某些情况下,例如查看查询所返回的数据时,即使基础表看起来仅包含唯一记录,您仍可能会看到看似重复的记录。如果您的视图不包括唯一标识记录的字段,则可能会出现问题。例如,下图显示了查询返回的数据。" {+ |8 ]9 H# T. S5 R4 z
$ o0 d9 ~, J; e( b
在该视图中,有多条记录显示为重复记录。如果您为查询添加一个或多个其他字段,例如客户名称或每份订单的主键字段(订单 ID),您会发现实际上每条记录都是唯一的,如下图所示:
6 M, `  \! B) J7 A' H/ ^$ v& |- P' _; L1 z
创建查询时,通常应包括一个或多个能唯一标识每条记录的字段。通常,主键字段就能够实现该功能,但您也可以改用其他字段的组合。例如,假设某个常见联系人姓名或某个城市名出现多处,但如果您包括了电话号码和地址,则这种数据组合将使每条记录都具有唯一性。, p3 ~4 S. u& |' b; \! _
处理重复数据时需要考虑的因素处理重复记录的方式取决于以下几个因素:
/ V* F2 t% z  L6 [通过回答上述问题(或类似的问题),再加上您的数据知识,就可以制定一份处理冗余数据的计划。( j7 B( K. k: D
删除重复数据的常规准备工作如果您选择删除重复记录,则必须先处理所有现有的表关系。通常,大部分数据库都使用一对多关系。例如,您的客户可能比较少,但每个客户下的订单非常多。因此,客户数据表位于关系的“一”端,而订单数据位于关系的“多”端。6 A  K! H6 ]( e$ C; j! c5 b
在进行操作时请记住以下规则:如果要删除的数据位于关系的“多”端,则可以直接删除数据而无需执行其他步骤。但如果要删除的数据位于“一”端,则必须在关系中设置一个属性,否则,Access 将禁止删除。
& s. a5 j7 }* `5 j有关删除位于“一”端的数据的详细信息,请参阅使用删除查询从数据库中删除一项或多项记录一文。
0 }( N$ }5 |3 |1 u' ~  i: P, q" G* J开始删除冗余数据之前,请考虑采用下面的一种或多种方法来准备数据库:. P# a  g. m9 a6 Q
返回页首) K- V- b6 M+ B( W/ M0 O
准备一些示例数据本文的操作方法部分中提供了示例数据表。操作步骤使用示例表来帮助您理解查询的工作方式。如果您愿意,可以选择将示例表输入或导入到新的或现有数据库中。
4 x$ i! A/ F! |! OAccess 提供了几种将这些示例表添加到数据库的方法。您可以手动输入数据,也可以将每个表复制到电子表格程序(如 Office Excel 2007)中然后将工作表导入 Access,或者可以将数据粘贴到文本编辑器(如记事本)中然后从生成的文本文件中导入数据。: e  o% q) z4 Y( {: G" H
本部分中的步骤介绍了如何在空白数据表中手动输入数据,以及如何将示例表复制到 Excel 中,然后将这些表导入 Access 2007。有关创建和导入文本数据的详细信息,请参阅文章导入或链接文本文件中的数据" m! ~3 D2 J) h+ b5 j
本文中的操作步骤使用下列表:' W5 @+ K& N# E" F$ h
“顾客”表:4 o3 Z0 |" `' _; N9 c$ t. c3 R
: `7 c( t; i6 _
公司名称联系人姓名地址城市邮政编码移动电话
Baldwin Museum of ScienceJosh Barnhill1 Main St.New York12345(505) 555-2122
Blue Yonder AirlinesWaleed Heloo52 1st St.Boston23456(104) 555-2123
Coho WineryPica Guido3122 75th Ave. S.W.Seattle34567(206) 555-2124
Contoso PharmaceuticalsJean Philippe Bagel1 Contoso Blvd.LondonNS1 EW2(171) 555-2125
Fourth CoffeeJulian PriceCalle Smith 2Mexico City56789(7) 555-2126
Coho WineryChristine Hughes3122 75th St. S.Seattle34567(206) 555-2125
Humongous InsuranceSteve Riley67 Big St.Tampa01234(916) 555-2128
Trey ResearchDana Birkby2 Nosey PkwyPortland43210(503) 555-2129
Fourth CoffeeReshma PatelCalle Smith 2Mexico City56789(7) 555-2233
+ ]; ^( ~8 w& B

- p! }% E. |5 b4 M“员工”表:
7 m3 p" }' \. d6 `" W
/ Q! G! m( M" T5 B" u( S- W0 H# ?
姓氏地址城市生日雇佣日期
BarnhillJosh1 Main St.New York1968-02-051994-07-04
HelooWaleed52 1st St.Boston1957-05-221996-11-22
GuidoPica3122 75th Ave. S.W.Seattle1960-11-112000-03-11
BagelJean Philippe1 Contoso Blvd.London1964-03-221998-06-22
PriceJulianCalle Smith 2Mexico City1972-06-052002-01-05
HughesChristine3122 75th St. S.Seattle1970-01-231999-04-23
RileySteve67 Big St.Tampa1964-04-142004-10-14
BirkbyDana2 Nosey PkwyPortland1959-10-291997-03-29
BagelJean Philippe1 Contoso Blvd.London1964-03-221998-06-20

! N* u7 R$ s4 ^/ b
" y. j, O: `* I  f% N  V“欠款金额”表:* q7 b. S" ]4 n: G- ^) O
, I; S5 \  o) z8 i
公司名称联系人姓名地址城市邮政编码移动电话应付金额
Baldwin Museum of ScienceJosh Barnhill1 Main St.New York12345(505) 555-2122 $556.78
Blue Yonder AirlinesWaleed Heloo52 1st St.Boston23456(104) 555-2123 $1,893.24
Coho WineryPica Guido3122 75th Ave. S.W.Seattle34567(206) 555-2124 $321.79
Contoso PharmaceuticalsJean Philippe Bagel1 Contoso Blvd.LondonNS1 EW2(171) 555-2125 £457.68
Fourth CoffeeJulian PriceCalle Smith 2Mexico City56789(7) 555-2126$98.75
Coho WineryChristine Hughes3122 75th St. S.Seattle34567(206) 555-2125 $321.79
Humongous InsuranceSteve Riley67 Big St.Tampa01234(916) 555-2128 $297.45
Trey ResearchDana Birkby2 Nosey PkwyPortland43210(503) 555-2129 $509.09
Fourth CoffeeReshma Patel2 Calle SmithMexico City56789(7) 555-2233 $98.75
! a8 @+ u5 N, E+ U% C
& q# i0 x" I/ t0 K7 I. }7 `
“客户”表:' v" {4 r7 S/ q

! r9 i, I2 m! C# v: R" n
名称地址城市移动电话传真
Baldwin Museum of Science1 Main St.New York(505) 555-2122 (505) 555-2122
Blue Yonder Airlines52 1st St.Boston(104) 555-2123 (104) 555-2123
Coho Winery3122 75th Ave. S.W.Seattle(206) 555-2124 (206) 555-2124
Contoso Pharmaceuticals1 Contoso Blvd.London(171) 555-2125 (171) 555-2125
Fourth CoffeeCalle Smith 2Mexico City(7) 555-2126(7) 555-2126
Consolidated Messenger3122 75th St. S.Seattle(206) 555-2125 (206) 555-2129
Graphic Design Institute67 Big St.Tampa(916) 555-2128 (916) 555-2128
Litware, Inc.3 Microsoft WayPortland(503) 555-2129 (503) 555-2110
Tailspin Toys4 Microsoft WayPortland(503) 555-2233 (503) 555-2239

, _/ R% q1 ]) L, F9 o, O1 ~+ ^" x6 N
  m' J  N$ F) l$ h" p7 [手动输入示例数据创建示例工作表基于工作表创建数据库表 返回页首* `* d; K1 m' ~2 m- q, r
在单个表中查找和编辑、隐藏或删除重复数据以下各节中的步骤介绍了在单个表中查找和编辑、隐藏或删除重复值的最常见方法。1 B0 m+ n) V! R2 p5 A0 Z7 D' e4 G
& D' A  J! r& ?; Q6 v
查找其中某些字段全部或部分匹配的记录查找包含全部或部分匹配值的记录的过程包括以下主要步骤:5 q6 O$ C0 @; j0 e8 H) A
本节中的步骤介绍了如何创建重复项查询,以及如何更改查询来查找部分匹配项。这些步骤将使用下表中提供的“顾客”表。要在数据库中使用该表,请参阅本文前面的准备一些示例数据一节。您可以根据自己的数据对这些步骤进行相应的调整。1 b. F: f5 C2 I9 e$ H  f6 p) U0 z
公司名称联系人姓名地址城市邮政编码移动电话
Baldwin Museum of ScienceJosh Barnhill1 Main St.New York12345(505) 555-2122
Blue Yonder AirlinesWaleed Heloo52 1st St.Boston23456(104) 555-2123
Coho WineryPica Guido3122 75th Ave. S.W.Seattle34567(206) 555-2124
Contoso PharmaceuticalsJean Philippe Bagel1 Contoso Blvd.LondonNS1 EW2(171) 555-2125
Fourth CoffeeJulian PriceCalle Smith 2Mexico City56789(7) 555-2126
Coho WineryChristine Hughes3122 75th St. S.Seattle34567(206) 555-2125
Humongous InsuranceSteve Riley67 Big St.Tampa01234(916) 555-2128
Trey ResearchDana Birkby2 Nosey PkwyPortland43210(503) 555-2129
Fourth CoffeeReshma PatelCalle Smith 2Mexico City56789(7) 555-2233
$ P$ i; y0 {  _7 P+ j
创建重复项查询自定义查询以查找部分匹配项手动编辑记录返回节首 通过隐藏所有重复记录来显示唯一记录大部分数据库表都包含一个唯一标识每条记录的字段,该字段通常为主键字段。如果您在设计查询时隐藏或省略这些类型的字段,可能会看到看似重复的记录,因为所有返回字段中的值都是匹配的。
4 `- `/ W/ c# w" L& I例如,下图显示的查询结果中有两份订单(位于红色框中)看起来是重复的。
1 h& `4 [: M' @2 d7 Y1 s( e3 \3 J' q/ ]( o4 w5 d! _3 Z
但是,如果查询包括了主键字段(例如订单 ID)或能够唯一标识每条记录的其他字段(例如发货日期),您会发现这些记录并非重复记录。本节中的步骤介绍了如何隐藏查询返回的所有字段中的值均匹配的重复记录。例如,您可以隐藏有关 Antonio Moreno Taqueria 的记录之一,但不能隐藏有关 Blauer See Delikatessen 的记录,因为“地址”字段包含不同的值。
& ^$ C. e/ w/ _4 [* ?执行操作时,请记住以下规则:只有当查询结果中的所有字段均包含相同的值时,才会将两条或多条记录视为重复记录。即使有一个字段中的值不同,每条记录也将是唯一记录,因此您不能使用此处介绍的方法隐藏这些记录。如果要隐藏这些类型的重复记录,可以将总计查询与聚合函数(例如 FIRSTMINMAX 等等)一起使用。有关执行此操作的信息,请参阅本文后面通过指定在结果中显示哪些重复记录来显示不同的记录一节。
, c9 A+ a- j. l6 a3 S8 _+ Q0 k# j) xAccess 提供了两种仅在查询结果集中显示唯一值的方法:9 }4 h, G0 L! S. Z
本节中的步骤介绍了如何使用这两种方法。4 z: e( t  F! O2 _  M5 h; X
显示隐藏的字段设置“唯一值”属性 注释   将查询的“唯一值”属性设置为“是”后,如果查询处于数据表视图,则您不能编辑字段值或删除数据。要编辑或删除数据,请在数据表视图中打开基础表。
1 [& d1 b% H1 Z8 ]+ w返回节首 通过指定在结果中显示哪些重复记录来显示不同的记录当有重复记录时,您可能只希望看到不同的值,即:仅显示每组重复记录中的一条记录。要查询某条特定的重复记录,可以使用一种称为总计查询的查询。向总计查询添加字段时,查询会将每个字段视为一个组,并且您可以针对组中的数据运行一类称为聚合函数的函数。这些函数反过来又可以从一组重复记录中返回一条记录。
4 k9 Z8 b. D0 }# g; y您可以通过多种方法对这些数据使用总计查询和聚合函数:
9 U9 L& T" H- c本节中的步骤介绍了如何查询原始记录、最近的记录和最早的记录。这些步骤将使用“员工”表。, P9 X4 l- ~* n, C/ R& v! }6 e
姓氏地址城市生日雇佣日期
BarnhillJosh1 Main St.New York05-Feb-196810-Jun-1994
HelooWaleed52 1st St.Boston22-May-195722-Nov-1996
GuidoPica3122 75th Ave. S.W.Seattle11-Nov-196011-Mar-2000
BagelJean Philippe1 Contoso Blvd.London22-Mar-196422-Jun-1998
PriceJulianCalle Smith 2Mexico City05-Jun-197205-Jan-2002
HughesChristine3122 75th St. S.Seattle23-Jan-197023-Apr-1999
RileySteve67 Big St.Tampa14-Apr-196414-Oct-2004
BirkbyDana2 Nosey PkwyPortland29-Oct-195929-Mar-1997
BagelJean Philippe1 Contoso Blvd.London22-Mar-196420-Jun-1998
8 k3 \  U' |" }: E  Z. S
如果要在数据库中使用该表,请参阅本文前面的准备一些示例数据中的步骤。" t! {- D8 |* t. h0 ?1 w
使用总计查询如果查询找到所需结果,则可以将其更改为删除查询并运行该查询,以方便快捷地删除重复记录。有关运行删除查询的信息,请参阅本文后面的使用删除查询删除重复记录一节。7 M# G1 a& A9 W" _0 \' p6 I
返回节首 对重复记录使用聚合函数(Count、Sum、Average)除了从一组重复记录中返回某条特定记录以外,您还可以使用聚合函数对重复记录进行计数或汇总一组重复记录的数据。通常,您需要在执行合并或删除重复数据的步骤之前运行这些函数。; W, b& d% f0 b6 }- u' w- X1 ~; Y
您可以通过创建使用 CountSumAverage 等聚合函数的总计查询,来汇总表中的重复数据。 注释   在数据表视图中查看总计查询时,不能编辑字段值或删除记录。要编辑或删除数据,请在数据表视图中打开基础表。
4 ~; b: x+ I" q4 T9 X# C% _' H- m7 H
3 h% R& t1 j7 x. M- U1 H本节中的步骤将使用“拥有数量”表。
& u# t7 F* v5 H4 y
公司名称联系人姓名地址城市邮政编码移动电话应付金额
Baldwin Museum of ScienceJosh Barnhill1 Main St.New York12345(505) 555-2122 $556.78
Blue Yonder AirlinesWaleed Heloo52 1st St.Boston23456(104) 555-2123 $1,893.24
Coho WineryPica Guido3122 75th Ave. S.W.Seattle34567(206) 555-2124 $321.79
Contoso PharmaceuticalsJean Philippe Bagel1 Contoso Blvd.LondonNS1 EW2(171) 555-2125 £457.68
Fourth CoffeeJulian PriceCalle Smith 2Mexico City56789(7) 555-2126$98.75
Coho WineryChristine Hughes3122 75th St. S.Seattle34567(206) 555-2125 $321.79
Humongous InsuranceSteve Riley67 Big St.Tampa01234(916) 555-2128 $297.45
Trey ResearchDana Birkby2 Nosey PkwyPortland43210(503) 555-2129 $509.09
Fourth CoffeeReshma Patel2 Calle SmithMexico City56789(7) 555-2233 $98.75

3 v* E  X; @+ o) \如果要在数据库中使用该表,请参阅本文前面的准备一些示例数据中的步骤。6 b5 w/ v! d# C
创建总计查询返回节首 使用删除查询删除重复记录当您确认某个表包含重复记录后,可以通过创建并运行一个删除查询来删除不需要的数据。创建并运行删除查询的过程通常包含以下主要步骤:9 E* h% w$ y8 A* S6 z
要点   您不能撤消删除查询的结果。因此,在运行删除查询之前,应当备份数据库。有关备份数据库的信息,请参阅本文前面的备份数据库一节。
5 U2 v9 h2 }5 U2 Z# R/ I下面的步骤说明了如何创建选择查询,将它转换为删除查询,然后运行删除查询来删除记录。
- x, O+ ]8 o9 `6 A  Z创建选择查询将选择查询转换为删除查询并运行该查询以删除数据隐藏确认消息如果不想在每次运行删除查询或其他动作查询时都看到确认消息,请执行以下步骤。7 k9 @3 J& [3 \
返回节首 禁止用户输入重复值您可以实施多条规则来防止用户输入重复数据:
7 d3 T: M6 z  c( m% B5 A返回节首 返回页首
/ H" \1 H1 D3 v, {) m- p9 w在多个表中查找和编辑、隐藏或删除重复数据以下各节中的信息介绍了一些方法,您可以用这些方法来查找并编辑、隐藏或删除存在于多个表中的重复记录。通常,当您尝试将一个数据库与另一个数据库集成时,就会出现两个或多个表中的数据重叠的现象。
* X) i/ u# @0 u- Y# n& @* U% E+ a, d8 V7 e" l2 H2 S9 J
当两个表中存在重复值时,使这些值相邻显示您可能经常会遇到同一数据库的两个表中包含重复或重叠数据的情况。例如,假定您有一个“客户”表和一个“顾客”表:; y; b6 X4 s. @8 g7 ]4 `
“客户”表  3 l! C, P5 ^- d: @" H  D! {3 z
名称地址城市移动电话传真
Baldwin Museum of Science1 Main St.New York(505) 555-2122 (505) 555-3123
Blue Yonder Airlines52 1st St.Boston(104) 555-2123 (104) 555-2124
Coho Winery3122 75th Ave. S.W.Seattle(206) 555-2124 (206) 555-2125
Contoso Pharmaceuticals1 Contoso Blvd.London(171) 555-2125 (171) 555-2126
Fourth CoffeeCalle Smith 2Mexico City(7) 555-2126 (7) 555-2127
Consolidated Messenger3122 75th St. S.Seattle(206) 555-2125 (206) 555-2129
Graphic Design Institute67 Big St.Tampa(916) 555-2128 (916) 555-2128
Litware, Inc.3 Microsoft WayPortland(503) 555-2129 (503) 555-2110
Tailspin Toys4 Microsoft WayPortland(503) 555-2233 (503) 555-2239
3 Y6 G" S# h. n( j: @2 Q& j, A
“顾客”表  
* W* [0 s" A/ W0 D* j; b- G
公司名称联系人姓名地址城市邮政编码电话
Baldwin Museum of ScienceJosh Barnhill1 Main St.New York12345(505) 555-2122
Blue Yonder AirlinesWaleed Heloo52 1st St.Boston23456(104) 555-2123
Coho WineryPica Guido3122 75th Ave. S.W.Seattle34567(206) 555-2124
Contoso PharmaceuticalsJean Philippe Bagel1 Contoso Blvd.LondonNS1 EW2(171) 555-2125
Fourth CoffeeJulian PriceCalle Smith 2Mexico City56789(7) 555-2126
Adventure WorksChristine Hughes3122 87th Way S.W.Seattle34567(206) 555-2125
Humongous InsuranceSteve Riley67 Big St.Tampa01234(916) 555-2128
Trey ResearchDana Birkby2 Nosey PkwyPortland43210(503) 555-2129
Fabrikam, Inc.Jesper Aaberg9 Empire WaySeattle56789(206) 555-2233
; O7 s# w, J4 @4 n
请注意,在此例中,单个表并不包含重复值,但两个表中的字段包含某些重叠值,例如“客户”表中的“名称”字段中的数据与“顾客”表中“公司名称”字段中的数据。! e$ q' G. D6 ]; C3 c/ W& I* }1 S
您不能总是通过合并两个表来集成每个表中的数据。对于某些客户,“顾客”表中可能包含其最新信息,但“客户”表中可能包含其他用户的最新数据。通常,最好的做法是查看两个表中的内容,然后决定保留哪些数据以及删除哪些数据。- S" D  o; K# _9 k8 y
要将两个表中的记录合并到一起,您需要创建一个联合查询。该查询会将重复记录放在一起以便于查看。 注释   您不能编辑或删除联合查询所返回的数据。要编辑或删除数据,请在数据表视图中打开基础表。
8 N. F. B% \7 G$ Q% |# q0 q% S( Q  H0 `4 \7 ?, \
返回节首 当两个表中存在重复值时,仅显示一条记录有时候,您可能只需要查看两个相似表中的不同记录。如果某条记录同时存在于两个表中,您可以包括来自第一个表的记录而忽略第二个表中的对应记录。
  V6 C# T# _* H" V: {' C' n只有当所有选定字段中的值都匹配时,Access 才会将来自不同表的记录视为重复记录。例如,如果您在查询中包括“公司名称”、“城市”、“地址”、“移动电话”和“传真”字段,则只有当全部五个字段中的值都匹配时,Access 才会将记录视为重复记录。
9 H6 V4 L- t! H7 D$ K' R本节中的步骤说明了如何更改前一节中的查询,以显示“顾客”表中的所有记录,而仅显示“客户”表中具有唯一性的记录。
6 D# u- o0 Y# V) l' D6 T7 b 注释   您不能编辑联合查询返回的数据。要编辑或删除数据,请在数据表视图中打开基础表。
. o) Z- P% ~# V; y, M  z/ r4 k修改查询返回节首 仅显示同时在两个表中找到的重复记录如果只需要查询两个表中都存在的匹配值,可以使用内部联接。如果您是 Access 新手,那么只需记住,内部联接是一个操作,只有当联接字段中的值匹配时,该操作才会链接两个或更多个表中的行。9 r3 u" H, s$ c' o+ A: \
您可以通过创建一个同时包括两个表的选择查询,然后在包含重复值的字段之间建立一种关系,来创建内部联接。默认情况下,Access 会在您创建关系时建立内部联接。6 D3 T- d5 t) \2 U6 ~
注释   您不能编辑由包含内部联接的选择查询返回的字段或行。如果要编辑数据,请打开基础表并更改每个表中的值。
' t" G9 L0 K2 O/ T- h2 [* g+ Z! \4 v. Y
创建包含内部联接的查询返回节首 仅查看一个表中在另一个表中没有匹配项的记录让我们继续讨论“顾客”表和“客户”表中包含重复数据的情况,现在,您将看到需要执行什么操作才能查看“顾客”表中在“客户”表中没有重复记录的那些记录。这可以帮助您在合并两个表之前,仅根据“顾客”表中的内容来针对某些客户制定决策。
. Y: Z% c4 n% \/ B通过创建查找不匹配项查询,可以仅查看“顾客”表中在“客户”表中没有匹配项的记录。这类查询使用示例数据检索“顾客”表中在“客户”表中没有匹配项的所有记录。
! y4 W" t- e* Q; F" o/ l 注释   在数据表视图中查看此查询时,可以编辑字段值或删除记录。
; L6 i- W% d& {8 e. B3 o  h2 R/ K! y" _, {. ]6 Y
创建查找不匹配项查询返回节首 从一个表中删除重复记录并将其余记录合并到另一个表中检查相似表中的重复数据后,可以删除重复记录并将其余数据合并到一个表中。该过程包括以下主要步骤:; l( t* J* f# m2 |* `4 G
本节中的步骤介绍了如何创建和使用删除查询和追加查询,以及如何删除表。这些步骤会用到“顾客”表和“客户”表。" c6 w& \2 M& [" W, A& p  t2 j
“顾客”表  
- A/ O  O' h: y' B7 \( S& g, Q4 @
公司名称联系人姓名地址城市邮政编码电话
Baldwin Museum of ScienceJosh Barnhill1 Main St.New York12345(505) 555-2122
Blue Yonder AirlinesWaleed Heloo52 1st St.Boston23456(104) 555-2123
Coho WineryPica Guido3122 75th Ave. S.W.Seattle34567(206) 555-2124
Contoso PharmaceuticalsJean Philippe Bagel1 Contoso Blvd.LondonNS1 EW2(171) 555-2125
Fourth CoffeeJulian PriceCalle Smith 2Mexico City56789(7) 555-2126
Adventure WorksChristine Hughes3122 87th Way S.W.Seattle34567(206) 555-2125
Humongous InsuranceSteve Riley67 Big St.Tampa01234(916) 555-2128
Trey ResearchDana Birkby2 Nosey PkwyPortland43210(503) 555-2129
Fabrikam, Inc.Jesper Aaberg9 Empire WaySeattle56789(206) 555-2233
2 g) c. P/ i: B" o* i; p- U* u3 g
“客户”表  1 I, {7 l, u' d; J! x6 c
名称地址城市移动电话传真
Baldwin Museum of Science1 Main St.New York(505) 555-2122 (505) 555-3123
Blue Yonder Airlines52 1st St.Boston(104) 555-2123 (104) 555-2124
Coho Winery3122 75th Ave. S.W.Seattle(206) 555-2124 (206) 555-2125
Contoso Pharmaceuticals1 Contoso Blvd.London(171) 555-2125 (171) 555-2126
Fourth CoffeeCalle Smith 2Mexico City(7) 555-2126 (7) 555-2127
Consolidated Messenger3122 75th St. S.Seattle(206) 555-0170 (206) 555-0171
Graphic Design Institute67 Big St.Tampa(916) 555-2128 (916) 555-2128
Litware, Inc.3 Microsoft WayPortland(503) 555-0192 (503) 555-0193
Tailspin Toys4 Microsoft WayPortland(503) 555-2233 (503) 555-2239
0 B2 V* I3 [- V( W
如果要在数据库中使用这些表,请参阅本文前面的准备一些示例数据。在本练习中,我们假设“客户”表包含最新信息 - 因此,您需要删除“顾客”表中的匹配记录,然后将“顾客”表中的其余记录合并到“客户”表中。 3 Q% O; ]2 u. t* |3 z
删除不需要的数据追加其余数据删除表返回节首 查看相关表中的数据时仅显示各不相同的记录将两个相关表中的数据组合在一起的查询可能会显示所有字段看似匹配的记录。但是,如果您仔细查看这些表,则可能会发现这些表实际上并不包含重复记录。如果查询不包含能够唯一标识每条记录的特定字段(如主键字段),就会出现这种问题。在这种情况下,您不需要删除这些记录,但可以采取措施来隐藏看似重复的记录。
& ^3 \4 u$ O( X7 n% ^% s例如,假定您使用查询将两个表中的客户订货数据集中在一起,以确保员工能够按时填写订单。客户可能在一份订单中订购多种产品,每种产品在基础表中显示为一条单独的记录(行)。由于订单是在同一天下达的,又是在同一天发货的,因此指定订单的记录可能会包含大量重复日期,例如:: Q( E1 ?  M& x! O8 l4 L0 }4 R- N
- ^9 \" ~  U- X& a/ E/ h6 g* e! a
由于您知道订单货物将在指定日期到达,并将在指定日期发运这些订单货物,因此您只需要查看每份订单中的一条记录(行)即可。要显示包含订单数据的表中的唯一性记录,可以将查询的“唯一的记录”属性设置为“是”。如果将该属性设置为“是”,查询将查找表中的所有行,找到匹配行(不仅仅是匹配字段)时,查询将仅在结果集中显示这些重复行中的一行。
9 L' [$ V5 X3 m. D$ x将“唯一的记录”属性设置为“是”执行操作时,请记住:将“唯一的记录”属性设置为“是”时,查询将比较所有行,只有当涉及的所有表中的行都匹配时,查询才会排除数据。并且,只有当查询包含两个或多个表时,您才可以使用“唯一的记录”属性。8 t  Y9 ]; x* [; G, F
当切换到数据表视图时,将仅看到每份订单的一条记录。
% v- |4 c* v0 J1 _4 ?6 y
7 v; a3 m0 k5 i4 M3 X" p另外还请记住:当您将“唯一的记录”属性设置为“是”并运行查询时,可能仍然会看到看似重复的记录。继续以前面的示例为例,您可能仍然会看到具有匹配的订购日期和发货日期的记录,例如:5 y# K0 `/ w  H6 }3 l* x
# i' A) S1 d3 S# |5 l3 `

8 d% H# D; H6 e  o" v7 K' X如果您在同一天收到两份不同的订单,然后又在同一天发运这两份订单的货物,就会出现这种情况。在这种情况下,将“唯一的记录”属性设置为“是”将不会在查询结果中隐藏此类记录,因为这些记录在基础表中并不是真正的重复记录。
! n/ Y; p% J$ d8 e1 R- h$ y如果您只想查看此类记录的一个实例(即:每天一条订单记录),则需要将查询的“唯一值”属性设置为“是”。将“唯一值”属性设置为“是”后,查询将不会在基础表中查找重复值,而是查看您指定的字段中的值;如果两条记录的所有字段均匹配,查询将从视图中隐藏其中一条记录。
+ _5 t/ p4 n0 ~, j* J设置“唯一值”属性的方法与设置“唯一的记录”属性的方法相同 - 显示查询的属性表并将设置更改为“是”。在属性表中,“唯一值”属性框位于“唯一的记录”属性框上面。 / p1 B0 U3 i7 c, e9 o5 r
! L  W8 t1 h( i, |+ M
继续以前面的示例为例,现在,您将只能看到接收或发运一份或多份订单的日期,而看不到为每份订单显示一条记录。" ^; k; u" L$ _9 b8 u, @* }$ U
" _* V, r/ c, P9 X
3 k6 @* X4 k1 o" I* Q, _
注释   由于将“唯一的记录”属性设置为“是”适用于表中向查询提供数据的行,而将“唯一值”属性设置为“是”仅适用于查询中的字段,因此不能同时使用这两个属性。如果将其中一个设置为“是”,Access 会自动将另一个属性设置为“否”。但您也可以将两个属性均设置为“否”以返回所有记录。
# q9 m" u# h* t9 x下表提供了一个摘要,以帮助您在查询中为“唯一的记录”属性和“唯一值”属性选择设置。0 X; A4 V( L& o1 T- l* A
如果您的查询基于...并且您想...设置...结果...
两个或多个表,但所有查询字段均来自一个表查看表中的不同记录(对于表中的两条记录而言,只有当其中的所有字段都匹配时,才会被视为重复记录)将“唯一的记录”设置为“是”(Access 会自动将“唯一值”设置为“否”)。如果表包含重复记录,查询将忽略这些重复记录。但如果查询不包括能够唯一标识记录的字段,则查询结果仍有可能会显示所有字段均匹配的记录。
一个或多个表在查询的数据表视图中查看不同的记录(对于两条记录而言,只有当数据表视图中的所有字段都匹配时,才会被视为重复记录)将“唯一值”设置为“是”(Access 会自动将“唯一的记录”属性设置为“否”)。查询将在数据表视图中排除重复记录(其中的所有字段均匹配)。但请记住,您可能看不到基础表中的所有不同记录。
一个或多个表所有记录将“唯一值”设置为“否”,将“唯一的记录”设置为“否”。您将看到两个表中的所有唯一性记录和重复记录。
+ `: C* B8 D* r& X, m) i
返回节首 查看相关表中的特定记录或汇总重复数据查看相关表中的重复数据时,您可能希望在重复数据集中查看某条特定记录,或者希望使用 CountSum 或其他聚合函数之一来汇总重复数据。8 c- ~, i2 d' Q+ M! s" {' Y/ s
与上一节介绍的情况相似,您的表中可能并不包含真正的重复数据,但当您查看共享一对多关系的两个表(例如“订单”表和“订购明细”表)中的数据时,可能会找到多条包含多个匹配字段的记录。例如,员工可能收到了来自同一客户的多份订单,或者该员工可能在同一天对照不同订单售出了同一产品,等等。如果您要查找相关数据以回答如下所示的询问,则需要对数据进行汇总而不是删除重复数据。; j9 C. M) X% q  i* @+ J
要汇总数据,可以使用与本文前面的通过指定在结果中显示哪些重复记录来显示不同的记录一节中讨论的查询类似的总计查询。要创建包含多个表的总计查询,请执行以下操作:4 P1 Q7 p. N% w3 g( I0 v9 f$ U# k





欢迎光临 航空论坛_航空翻译_民航英语翻译_飞行翻译 (http://bbs.aero.cn/) Powered by Discuz! X2