使用子查询访问更新

Posted

技术标签:

【中文标题】使用子查询访问更新【英文标题】:ACCESS update with subquery 【发布时间】:2020-07-20 03:05:07 【问题描述】:

我有一张这样的桌子:

现在我正在尝试在表格的“SUMAMOUNT”列中写下每个“CODE”和“IBAN”的金额总和,但我无法达到这一点。

我想要这样的东西:

我正在使用此查询,但它不起作用:

update tabella
set sumamount = (select sum(t2.amount)
                  from tabella as t2
                  where t2.code = tabella.code and t2.iban = tabella.iban
                 );

前面的查询给了我这个结果: 你能帮助我吗?我正在使用 MS ACCESS。 提前谢谢!

编辑:错误截图:

我什至无法尝试运行它,因为他要求我保存它。当我尝试保存时,访问给了我这个错误。

【问题讨论】:

【参考方案1】:

考虑域聚合DSum,它允许可更新的查询。下面假设 codeiban 是文本类型,因此需要单引号括起来。

UPDATE tabella t
SET t.sumamount = DSUM("amount", 
                       "tabella",  
                       "code = '" & t.code & "' AND iban = '" & t.iban & '");

(顺便说一句,数据库中的最佳做法是避免将计算保存在表中。节省资源并根据需要简单地对数据运行查询。)

【讨论】:

DSUM 是否仅在 Access 中可用(如 Nz()) - 还是在其他应用程序中使用 ODBC/OLEDB 时也可用? 太棒了!为优秀的解决方案点赞。我有同样的问题,这个答案解决了我的问题。再次,非常感谢。 @Dai,域聚合在 ODBC/OLEDB 连接中作为 Access 方言的一部分提供。

以上是关于使用子查询访问更新的主要内容,如果未能解决你的问题,请参考以下文章

使用子查询更新与使用连接更新 - 性能更好

使用子查询更新语句

无法深入访问字段多个子查询

在 Sql Server 中使用子查询更新查询

mysql:使用子查询更新,

使用子查询 (Oracle) 更新表