通过对单个表的相关子查询访问 SQL UPDATE

Access SQL UPDATE with a correlated sub query on a single table

提问人:Steve Hewitt 提问时间:11/13/2023 最后编辑:Steve Hewitt 更新时间:11/13/2023 访问量:63

问:

我有一个表格,上面有一个网格引用字符串、一个年份数字和一个总数(HectadGridRef、YYYY 和 TotalRecordsAllSpecies)。我添加了一个列,FiveYearTotalRecords。我想用相邻年份(前后两年)的值更新新列,以便通过进一步处理,我可以处理五年的滚动窗口。

我已经在表格的测试版本上尝试过这个:

UPDATE tblYRAllSp5yeartest01 AS XX  
 SET FiveYearTotalRecords = (SELECT SUM (ZZ.TotalRecordsAllSpecies) FROM tblYRAllSp5yeartest01 AS ZZ  
 WHERE (ZZ.HectadGridRef = XX.HectadGridRef)  
   AND (ZZ.YYYY > (XX.YYYY - 3))  
   AND (ZZ.YYYY < (XX.YYYY + 3))); 

但我收到消息“操作必须使用可更新的查询”。

我怀疑问题是我正在尝试更新已经打开的表(通过子查询)。是这样吗?除了复制表并将子查询指向该表之外,还有什么办法可以解决这个问题吗?

[编辑:我已经尝试过使用表格的副本,但我仍然收到相同的消息,所以我想不出问题出在哪里。据我所知,我对整个数据库具有适当的权限]。

ms-access sql-update 子查询 相关

评论

2赞 HansUp 11/13/2023
Access 认为查询不可更新,因为它包含子查询。子查询表的标识不是问题;中的任何子查询都会触发相同的投诉。看看 DSum(而不是子查询)是否会提供您想要的东西。UPDATE
3赞 HansUp 11/13/2023
为什么需要存储这些总和,而不是在查询中需要时计算它们?SELECT
0赞 Steve Hewitt 11/13/2023
@HansUp - 大概这是一个访问限制,因为我在非 Access SQL 中看到过带有子查询的 UPDATE 示例 - 诚然,只有在子查询中使用了第二个表。我已经查看了 DSum(感谢您的建议),但我仍然需要参考实际上的外部查询,因为 DSum 条件是动态的,相对于外部查询中的每一行......据我了解,至少......我不确定这是否可能。
0赞 Steve Hewitt 11/13/2023
@HansUp - 关于在需要时计算总和,滚动的“年窗口”是为以后的分析做准备,即计算不同百公顷中物种之间随时间推移的丰度百分比。与其一次性尝试所有事情,不如分阶段完成更舒适。我选择使用 SELECT INTO 一个新表,具有相同的相关子查询;到目前为止,这是我想要的。

答: 暂无答案