0

我有一个查询,它查看一个表字段并匹配第二个表的字段。它会查看字段是否彼此不匹配。如果不匹配,则第二个表的字段必须替换第一个表的字段。我有这个工作,除非两个表字段中的任何一个都有空值。我尝试在第一个表上使用 isNull() 并且它确实选择了不为空的值,但是如果我将相同的函数应用于第二个表,我将一无所获。

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]));
4

1 回答 1

1

你正在经历这样一个事实null <> null

如果您能够定义一个永远不会出现在两列中的字符串值,则可以使用 解决此问题:IsNull()

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

这将两个空值视为相等,并认为空值不等于任何非空值。

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

[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)
)
于 2020-09-18T19:03:32.847 回答