如何在 Access 中比较具有 Null 值的字段

How to compare fields with Null values in Access

我有一个查询查看一个 table 的字段并匹配第二个 table 的字段。它会查看字段是否彼此不匹配。如果没有匹配项,第二个 table 的字段必须替换第一个 table 的字段。当两个 tables 字段中的任何一个为空值时,我可以正常工作。我尝试在第一个 table 上使用 isNull() 并且它确实 select 不为空的值但是如果我将相同的函数应用于第二个 table 我在 [=13] 中什么也得不到=].

UPDATE [NAVAIR Deficiencies] INNER JOIN NAVAIR_Deficiencies_Temp ON [NAVAIR Deficiencies].[Unique Deficiency Code] = NAVAIR_Deficiencies_Temp.[Unique Deficiency Code] SET [NAVAIR Deficiencies].[Hull Q] = [NAVAIR_Deficiencies_Temp]![Hull Q], NAVAIR_Deficiencies_Temp.Changed = True
WHERE ((IsNull([NAVAIR Deficiencies]![Hull Q])<>[NAVAIR_Deficiencies_Temp]![Hull Q]));

您正在体验 null <> null.

可以 使用 IsNull() 解决这个问题,如果你能够定义一个从未出现在两列中的字符串值:

IsNull([NAVAIR Deficiencies]![Hull Q], '§§§§') 
    <> IsNull([NAVAIR_Deficiencies_Temp]![Hull Q], '§§§§')

这将两个空值视为相等,并认为一个空值不等于任何 non-null 值。

或者,您可以使用布尔逻辑枚举所有可能的情况

[NAVAIR Deficiencies]![Hull Q]) <> [NAVAIR_Deficiencies_Temp]![Hull Q]
or ([NAVAIR Deficiencies]![Hull Q] is null and [NAVAIR_Deficiencies_Temp]![Hull Q] is not null)
or ([NAVAIR Deficiencies]![Hull Q] is not null and [NAVAIR_Deficiencies_Temp]![Hull Q] is null)

用否定表示可能更简单:

not (
    [NAVAIR Deficiencies]![Hull Q]) = [NAVAIR_Deficiencies_Temp]![Hull Q]
    or ([NAVAIR Deficiencies]![Hull Q] is null and [NAVAIR_Deficiencies_Temp]![Hull Q] is null)
)