MS-Access - 使用加入另一个表的结果更新列

Posted

技术标签:

【中文标题】MS-Access - 使用加入另一个表的结果更新列【英文标题】:MS-Access - update column using results from joining another table 【发布时间】:2019-02-28 09:05:44 【问题描述】:

我需要更新 Amounts.Amt_lcy,方法是将 Amt_fcy 列与相应的 Fx_rates.Rate 相乘,方法是将两个数据表连接起来。

*Amounts*

Data        |    Amt_fcy    |  Amt_lcy  
31/03/2018            10              
30/04/2018            15    


*Fx_rates*

Data        |  Rate  
31/03/2018      2.5
30/04/2018      3.1

我的查询如下:

update Amounts set Amt_lcy=(select Amounts.Amt_fcy*Fx_rates.Rate from Amounts left join Fx_rates on Amounts.Data=Fx_rates.Data)

我一定犯了一些基本错误,因为我收到“操作必须使用可更新查询”错误。 任何帮助都将受到欢迎

【问题讨论】:

您是否有理由更新这些金额,而不是保留费率历史记录表并“即时”计算? 实际上,我处理的是不同的数据结构,我只是使用了这个简化的示例,以便了解我在真实事物上做错了什么。谢谢 :) 【参考方案1】:

这是一个常见问题。

在 Access 中的更新查询中,任何查询中的所有列(包括子查询但不包括 EXISTS 子句)都需要可更新。

由于您在子查询中计算 Amounts.Amt_fcy*Fx_rates.Rate,并且该子查询不可更新,因此查询失败。

可以重写此查询以在主查询中执行该计算,同时运行速度更快:

Update Amounts 
Left join Fx_rates on Amounts.Data=Fx_rates.Data
set Amt_lcy =  Amounts.Amt_fcy*Fx_rates.Rate

【讨论】:

以上是关于MS-Access - 使用加入另一个表的结果更新列的主要内容,如果未能解决你的问题,请参考以下文章

如何加入我的结果以检索另一个表的相应记录?

在 ms-access 中获取表的外键约束列表?

使用 Criteria API 根据条件计算加入表的结果

Databricks 正在“更新 Delta 表的状态”

SQL:根据另一个表的计数结果更新一个表中的列

如何更新作为 MySQL 中另一个表的聚合结果的字段?