我在 Access 2003 中有两个表,这些表包含型号和帐号,序列号是主键。我怎么能去比较两个表中的相同序列号,看看有什么变化?
例如:
假设第 2 行来自 TableA,第 3 行来自 TableB,我将如何从一个表(第 2 行)中提取一行并将其与不同表(第 3 行)中的相同主键进行比较。
我在 Access 2003 中有两个表,这些表包含型号和帐号,序列号是主键。我怎么能去比较两个表中的相同序列号,看看有什么变化?
例如:
假设第 2 行来自 TableA,第 3 行来自 TableB,我将如何从一个表(第 2 行)中提取一行并将其与不同表(第 3 行)中的相同主键进行比较。
此查询将向您显示哪些[Serial Number]
值具有不同的值[Model Number]
和/或[Account Number]
。
SELECT
a.[Serial Number],
a.[Model Number] AS model_number_a,
b.[Model Number] AS model_number_b,
a.[Account Number] AS account_number_a,
b.[Account Number] AS account_number_b
FROM
TableA AS a
INNER JOIN TableB AS b
ON a.[Serial Number] = b.[Serial Number]
WHERE
a.[Model Number] <> b.[Model Number]
OR a.[Account Number] <> b.[Account Number];
请注意,查询只会检查[Serial Number]
两个表中都存在的值。如果您还想返回 aTableA.[Serial Number]
中不存在的行TableB
,请将连接更改为LEFT JOIN
。
如果[Model Number]
and/or[Account Number]
可以包含 Null,则比较将更具挑战性。如果您将从 Access 应用程序会话中运行查询,则可以使用Nz()
来处理 Null。
WHERE Nz(a.[Model Number], '') <> Nz(b.[Model Number], '')
如果需要从 Access 外部运行查询,请使用IIf()
表达式。
WHERE
IIf(a.[Model Number] Is Null, '', a.[Model Number])
<>
IIf(b.[Model Number] Is Null, '', b.[Model Number])