【发布时间】:2018-11-17 17:29:02
【问题描述】:
我希望为this question 提供答案,其中 OP 有两个表:
表1
+--------+--------+
| testID | Status |
+--------+--------+
| 1 | |
| 2 | |
| 3 | |
+--------+--------+
表2
+----+--------+--------+--------+
| ID | testID | stepID | status |
+----+--------+--------+--------+
| 1 | 1 | 1 | pass |
| 2 | 1 | 2 | fail |
| 3 | 1 | 3 | pass |
| 4 | 2 | 1 | pass |
| 5 | 2 | 2 | pass |
| 6 | 3 | 1 | fail |
+----+--------+--------+--------+
在这里,如果与 Table2 中的 testID 关联的所有 stepID 记录中的 status 具有 @987654330 @ of pass,否则 Table1 应使用 fail 更新为 testID。
在这个例子中,结果应该是:
+--------+--------+
| testID | Status |
+--------+--------+
| 1 | fail |
| 2 | pass |
| 3 | fail |
+--------+--------+
我编写了以下 SQL 代码来实现这一点:
update Table1 a inner join
(
select
b.testID,
iif(min(b.status)=max(b.status) and min(b.status)='pass','pass','fail') as v
from Table2 b
group by b.testID
) c on a.testID = c.testID
set a.testStatus = c.v
但是,MS Access 报告了非常熟悉的“操作必须使用可更新查询”响应。
我知道,如果正在更新的记录和值集之间存在一对多关系,则查询是不可更新的,但在这种情况下,聚合子查询将产生一对一的关系两个testID 字段。
这让我问,为什么这个查询不可更新?
【问题讨论】: