Вы используете RIGHT JOIN
, который будет включать строки, в которых ничего не существует в MyTable
.Эти строки обновляются (запрос UPDATE
в Microsoft Access всегда влияет на строки обеих таблиц при использовании объединений, даже если вы используете Set
только для столбцов в одной таблице), создавая новые строки.
Измените объединение на INNER JOIN
:
UPDATE TempMyTable AS b
INNER JOIN MyTable AS a ON (a.[ID] = b.[ID])
AND (a.T3 = b.T3) AND (a.T2 = b.T2) AND (a.T1 = b.T1)
SET b.T1 = a.T1, b.T2 = a.T2, b.T3 = a.T3
WHERE (((b.ID) Is Null));
Обратите внимание, однако, что этот запрос ничего не делает, так как вы проверяете WHERE (((b.ID) Is Null));
и присоединяетесь к b.ID
.Это означает, что Access не сможет вернуть строки ни при каких обстоятельствах.Вы, вероятно, захотите удалить это предложение WHERE
.
В конце OP искала различия с совпадающими идентификаторами, поэтому использовался следующий запрос:
UPDATE TempMyTable AS b
INNER JOIN MyTable AS a
ON ((a.T1 <> b.T1) OR (a.T2 <> b.T2) OR (a.T3 <> b.T3))
AND (a.[ID] = b.[ID])
SET b.T1 = a.T1, b.T2 = a.T2, b.T3 = a.T3;