我在Access 2003中有两个表,这些表包含型号和帐号,序列号是主键。我怎样才能比较两个表中相同的序列号,看看有什么变化?
例如:
假设第2行来自TableA而第3行来自TableB,我将如何从一个表(第2行)中提取一行并将其与另一个表(第3行)中的相同主键进行比较。
答案 0 :(得分:2)
此查询会显示哪些[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]
值。如果您还想要返回TableA.[Serial Number]
中不存在TableB
的行,请将联接更改为LEFT JOIN
。
如果[Model Number]
和/或[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])