有时,你可能希望比较 Access 中的两个表,并识别其中一个表中没有对应记录的记录。 标识这些记录最简单的方法就是使用“查找不匹配项查询向导”。 在该向导生成查询后,可通过修改查询的设计来添加或删除字段或者添加两个表之间的联接(以指示那些值须匹配的字段)。 还可不使用该向导,而是创建自己的查询来查找不匹配的记录。
本文介绍如何启动并运行“查找不匹配项“查询向导、如何修改向导的输出以及如何创建自己的查询来查找不匹配的记录。
本文内容
何时应该搜索不匹配的记录?
在以下两种常见情况中,可能需要对两个表进行比较并找到不匹配的记录。 查找不匹配的记录也许只是需执行的若干步骤中的第一步,这取决于具体情况。 本文只介绍如何查找不匹配的记录。
-
使用一个表来存储有关某样物品(例如产品)的数据,使用另一个表来存储涉及该物品的操作(例如订单)的相关数据。
例如,在罗斯文数据库模板中,有关产品的数据存储在“产品”表中,而每个订单中包含的有关产品的数据则存储在“订单明细”表中。 由于(设计原因)“产品”表中没有订单的相关数据,因此单独查看“产品”表并不能确定从未售出的产品。 而单独查看“订单明细”表也无法确定此信息,因为“订单明细”表仅包含有关已售产品的数据。 必须对这两个表进行比较,才能确定从未售出的产品。
如果要查看第一个表中在第二个表中无对应操作的物品的列表,可使用“查找不匹配项查询”。
-
有两个包含有重叠、冗余或冲突信息的表,并且想要将它们合并为一个表。
例如,假设您有两个表,它们的名称分别为“顾客”和“客户”。 这两个表基本上相同,但其中一个表或者两个表都包含有另一个表中没有的一些记录。 要合并这两个表,您必须首先确定这两个表中哪些记录是唯一的。
如果遇到这种情况,本文中介绍的方法可能会有所帮助,但可能还需要执行进一步的操作。 可运行“查找不匹配项查询向导”来识别不匹配的记录,但是如果要检索合并的记录集,可使用结果创建联合查询。 如果对编写结构化查询语言 (SQL) 语句得心应手,甚至可选择放弃“查找不匹配项查询向导”,自己编写联合查询。
一般情况下,可通过查找两个或多个表中的重复数据来解决有关信息重叠、冗余或冲突的问题。
有关联合查询或者有关查找、隐藏或消除重复数据的详细信息,请单击“另请参阅”部分中的链接。
注意: 本文中的示例使用了根据罗斯文数据库模板创建的数据库。
演示如何设置罗斯文
-
在“文件”选项卡上,单击“新建”。
-
可在搜索框中搜索 Northwind,或在左窗格的“模板类别”下单击“本地模板”,具体取决于所使用的 Access 版本。
-
在“本地模板”下单击“Northwind 2007 示例”,然后单击“创建”。
-
按照“罗斯文贸易”页(在“启动屏幕”对象选项卡上)上的说明打开数据库,然后关闭“登录对话框”窗口。
使用“查找不匹配项查询向导”比较两个表
-
在“创建”选项卡的“查询”组中,单击“查询向导”。
-
在“新建查询”对话框中,双击“查找不匹配项查询向导”。
-
在该向导的第一页上,选择具有不匹配记录的表,然后单击“下一步”。 例如,如果要查看从未售出的罗斯文产品的列表,请选择“产品”表。
-
在第二页上,选择相关的表,然后单击“下一步”。 例如,选择“订单明细”表。
-
在第三页上,选择与表相关的字段,然后依次单击“< = >”,然后单击“下一步”。 可在每个表中只选择一个字段。 例如,从“产品”表选择 ID,从“订单明细”表选择“产品 ID”。 检查“匹配字段”框中的文件,以验证正确字段是否匹配。
请注意,由于模板中内置的现有关系,“ID”和“产品 ID”字段可能已被选中。
-
在第四页上,双击您要从第一个表中查看的字段,然后单击“下一步”。 例如,选择“ID”和“产品名称”字段。
-
在第五页上,您可以选择查看结果或修改您的查询的设计。 在本示例中,请单击“查看结果”。 接受为该查询建议的名称,然后单击“完成”。
可能需要修改查询的设计,以便添加其他条件、更改排序顺序或者添加或删除字段。 有关修改“查找不匹配项查询”的信息,请阅读下一部分内容;有关创建和修改查询的更多常规信息,请访问“另请参阅”部分中的链接。
创建和修改“查找不匹配项查询”以便根据多个字段进行比较
-
在“创建”选项卡的“查询”组中,单击“查询向导”。
-
在“新建查询”对话框中,双击“查找不匹配项查询向导”。
-
在该向导的第一页上,选择具有不匹配记录的表,然后单击“下一步”。 例如,如果要查看从未售出的罗斯文产品的列表,请选择“产品”表。
-
在第二页上,选择相关的表,然后单击“下一步”。 例如,选择“订单明细”表。
-
在第三页上,选择与表相关的字段,然后依次单击“< = >”,然后单击“下一步”。 可在每个表中只选择一个字段。 例如,从“产品”表选择 ID,从“订单明细”表选择“产品 ID”。 查看“匹配字段”框中的文本,验证正确字段是否匹配。 完成该向导后,可联接其余字段。
请注意,由于模板中内置的现有关系,“ID”和“产品 ID”字段可能已被选中。
-
在第四页上,双击您要从第一个表中查看的字段,然后单击“下一步”。 例如,选择“ID”和“产品名称”字段。
-
在第五页上,单击“修改设计”,然后单击“完成”。
查询将在“设计”视图中打开。
-
在查询设计网格中,请注意两个表通过在该向导第三页上指定的字段(本示例中为“ID”和“产品 ID”)联接。 为剩余的每对相关字段创建联接,方法是将它们从第一个表(包含不匹配记录的表)拖动到第二个表中。 在本示例中,将“产品”表中的“列出价格”字段拖动到“订单明细”表中的“单价”字段。
-
双击某个联接(连接字段的线条)以显示“联接属性”对话框。 对于每个联接,请选择包含“产品”表中的所有记录的选项,然后单击“确定”。
请注意,在查询设计网格中,现在每个联接的一端都有一个箭头。
1. 在“列出价格”与“单价”字段之间创建联接时,它会限制这两个表的输出。 只有在这两个表的字段内有匹配数据的那些记录才包括在查询结果中。
2. 编辑了联接属性后,联接将仅限制箭头所指向的表。 箭头所背离的表中的所有记录都包括在查询结果中。
注意: 请确保联接上的所有箭头都指向同一个方向。
-
对于包含相关记录的表(在本示例中为“订单明细”表),请双击联接至第一个表的每个字段,在该向导第三页上选择的字段(在本例中为“产品 ID”字段)除外。 对于这些字段中的每个字段,请清除“显示”行中的复选框,然后在“条件”行中键入 Is Null。
-
还可以向其他查询字段中添加条件,或者创建基于第一个表中的值的计算字段。
-
在“ 查询设计 ”选项卡上的“ 结果 ”组中,单击“ 运行”。
该查询将返回不在任何现有订单中的产品的名称。
创建自己的查询以查找不匹配的记录
-
在“创建”选项卡上的“查询”组中,单击“查询设计”。
-
双击具有不匹配记录的表,然后双击具有相关记录的表。
-
在查询设计网格中,两个表应该具有称为联接的线条,这些线条通过相关的字段将这两个表连接在一起。 如果没有联接,请创建联接,方法是将第一个表(具有不匹配记录的表)中的每个相关字段拖动到第二个表(具有相关记录的表)中。
-
双击某个联接打开“联接属性”对话框。 对于每个联接,请选择选项 2,然后单击“确定”。
在查询设计网格中,联接发生变化,使一端带有一个箭头。
注意: 确保所有联接都指向相同方向。 如果联接指向不同方向,查询将不运行,并且如果任何联接不是箭头,查询也可能不运行。 联接应背离具有不匹配记录的表。
-
在具有不匹配记录的表中,双击想要查询返回的字段。
也可为其中任一字段输入条件;或者创建计算字段。
-
对于具有相关记录的表,请双击联接至第一个表的每个字段。 对于这些字段中的每个字段,请清除“显示”行中的框,然后在“条件”行中键入 Is Null。
-
在“ 查询设计 ”选项卡上的“ 结果 ”组中,单击“ 运行”。