sql - MS Access UPDATE 查询正在添加新行
问题描述
我很困惑为什么会这样。这是我在 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;
解决方案
您正在使用 a 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 正在寻找具有匹配 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;
推荐阅读
- ios - 具有特定部署目标的 xcodebuild
- php - Woocommerce:属性值未添加到产品中
- python - 如何在pytmx中处理瓷砖旋转?
- go - 如何获取本地时区的全名?
- c# - 为什么 API 向我发送新用户的 OK 响应和 Id 但找不到用户?
- r - Stata / R中多个国家的格兰杰因果关系
- reactjs - 为空时从 API 替换图像 url
- kubernetes - 我们可以在 Kubernetes 中使用 HPA 以固定块的方式将 Pod 扩展/扩展吗?
- android - 如何将 Android TV 库添加到 Cordova 项目?
- vue.js - 未找到此依赖项:* ./src/firebase/firebase.js 中的 firebase