【问题标题】:Extracting data and Comparing Microsoft Access提取数据和比较 Microsoft Access
【发布时间】:2013-07-15 23:08:11
【问题描述】:

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

例如:

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

【问题讨论】:

  • 比较的结果应该是什么?
  • 它只会覆盖 TableA 中的数据并在我的 update_type 列中添加更改

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


【解决方案1】:

此查询将显示哪些[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])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    相关资源
    最近更新 更多