提取数据和比较Microsoft Access

时间:2013-07-15 13:49:25

标签: sql ms-access ms-access-2007 access-vba

我在Access 2003中有两个表,这些表包含型号和帐号,序列号是主键。我怎样才能比较两个表中相同的序列号,看看有什么变化?

例如:

enter image description here

假设第2行来自TableA而第3行来自TableB,我将如何从一个表(第2行)中提取一行并将其与另一个表(第3行)中的相同主键进行比较。

1 个答案:

答案 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])