【问题标题】:MS Access UPDATE query is adding new rowsMS Access UPDATE 查询正在添加新行
【发布时间】:2018-06-05 07:09:00
【问题描述】:

我很难理解为什么会这样。这是我在 MS ACCESS 中的 UPDATE 查询:

UPDATE TempMyTable AS b
RIGHT 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));

我正在检查 T1、T2 和 T3 列中的更改。如果有更改,请更新 TempMyTable 行中的列。 但是,除了 T1、T2 和 T3 的值之外,所有字段中的新行都添加了空值。

编辑:解决方案,使用 INNER JOIN 并检查列是否与“”运算符不匹配。

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;

【问题讨论】:

  • @TimBiegeleisen 除了我在它们上测试 UPDATE 查询之外,这些表没有发生任何事情
  • @Tim 这不适用于 MS Access。带有外连接的更新可以在不匹配的记录上创建新记录

标签: sql ms-access sql-update ms-access-2010


【解决方案1】:

您正在使用RIGHT JOIN,它将包括MyTable 中不存在任何内容的行。这些行正在更新(Microsoft Access 中的UPDATE 查询在使用连接时总是会影响两个表的行,即使您只在一个表中的列上使用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 正在寻找具有匹配 ID 的差异,因此使用了以下查询:

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;

【讨论】:

  • 很奇怪;顺便说一句,我以前从未使用过 Access。
  • @ErikvonAsmuth 您可以使用我在帖子中编辑的查询来编辑您的帖子吗?您通过 INNER JOIN 将我置于正确的轨道上,完成后会将您的帖子标记为答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-28
相关资源
最近更新 更多