Access含子查询的UPDATE语句未生效问题求助
Access数据库UPDATE查询修正方案
你的原查询有几个明显问题导致更新失败:
- WHERE子句里
Val(idarr) = EXISTS(...)逻辑错误:EXISTS返回的是布尔值(True/False),不能直接和数值类型的idarr做等于比较 - 子查询里字段拼写错误:表字段是
Closed,你写成了chiuso;分组字段应该是idarr,你写成了idarrivo - 子查询末尾的
ORDER BY是多余的,分组查询用于匹配条件时不需要排序
下面是两种修正后的可用查询:
方案一:使用IN子句匹配符合条件的IDArr
UPDATE ln SET closed = true WHERE idarr IN ( SELECT idarr FROM ln WHERE Val(pv) > 0 AND Closed = false GROUP BY idarr HAVING SUM(importo) = 0 )
方案二:使用EXISTS关联主查询记录
UPDATE ln SET closed = true WHERE EXISTS ( SELECT 1 FROM ln AS sub WHERE sub.idarr = ln.idarr AND Val(sub.pv) > 0 AND sub.Closed = false GROUP BY sub.idarr HAVING SUM(sub.importo) = 0 )
说明
- 两种方案都会将所有属于“Importo总和为0”分组的记录的Closed字段设为true
- 方案二用表别名
sub区分主查询和子查询的同表记录,避免Access查询引擎的歧义 - 已经修正了所有字段拼写错误,确保和你的表结构一致
内容的提问来源于stack exchange,提问作者Jayelef
相关产品推荐
相关产品推荐

