问题描述
我有一个查询,该查询查看一个表字段并匹配第二个表字段。它看起来要看两个字段是否不匹配。如果不匹配,则第二个表的字段必须替换第一个表的字段。当两个表字段中的任何一个字段为空值时,我都可以正常工作。我尝试在第一个表上使用isNull(),并且确实选择了不为null的值,但是如果将相同的函数应用于第二个表,则不会得到任何回报。
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],'§§§§')
这会将两个空值视为相等,并认为一个空值不等于任何非空值。
或者,您可以使用布尔逻辑来枚举所有可能的情况
[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)
)