我有一个更新查询,该查询将比较两个表中的字段,如果该字段不同,则将新字段(table2)移到表1中。然后更新表中的“新建”,“已更改”,“现有”字段2为真。但是,发生的事情是将所有已更改且已存在的字段标记为true。它确实将更改的数据复制到表1中,但是由于某种原因,它会将所有导入的记录标记为true。
SQL
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,
NAVAIR_Deficiencies_Temp.Preexisting = True
WHERE ((([NAVAIR Deficiencies]![Hull Q])<>[NAVAIR_Deficiencies_Temp]![Hull Q]))
OR (((Nz([NAVAIR Deficiencies]![Hull Q]))<>[NAVAIR_Deficiencies_Temp]![Hull Q]));
答案 0 :(得分:0)
是的,查询正在按预期执行。您的INNER JOIN后面带有WHERE语句,这意味着任何不满足ON条件以及WHERE语句的条件的记录都不会成为结果集的一部分。然后,您为该结果集指定了[NAVAIR Deficiencies].[Hull Q] = [NAVAIR_Deficiencies_Temp]![Hull Q]
,NAVAIR_Deficiencies_Temp.Changed = True
和NAVAIR_Deficiencies_Temp.Preexisting = True
,这意味着您的输出将具有来自临时表的Hull Q值,True for Changed,True for早已存在于所有记录中,其中Hull Q在临时表中的值与在基础表中的值不同。