首页 > 解决方案 > Access 2010 SQL 查询选择带有临时表的内部联接

问题描述

在使用 VBA 的 Access 2013 中,我正在运行一个 SQL 查询,其中一个表 (CUSTOMERS_TEMP) 有一个monthly_total,它是从 SALESHIST_TEMP 表中获取的临时表 (SALESHIST) 中的 sales_price 的总和。我不确定为什么这不起作用。

Dim SQL As String
SQL = "Update CUST " _
    & "SET CUST.Monthly_Total = SALESHIST.Monthly_Total " _
    & "FROM CUSTOMERS_TEMP AS CUST " _
    & "INNER JOIN (SELECT KEY, SUM(SALES_PRICE) AS MONTHLY_TOTAL FROM SALESHISTORY_TEMP GROUP BY KEY) AS SALESHIST " _
    & "ON CUST.Key = SALESHIST.Key "
DoCmd.RunSQL SQL

标签: sqlvbams-accessinner-join

解决方案


考虑用于可更新查询的DSum 域聚合。还可以考虑将查询保存为数据库中的存储对象,因为它更有效,因为 Access 引擎可以编译它以获得最佳执行计划。此外,避免使用Key作为列名,因为它是一个保留字

SQL

UPDATE CUSTOMERS_TEMP CUST 
SET CUST.Monthly_Total = DSum("SALES_PRICE", "SALESHISTORY_TEMP", 
                              "[Key]='" & CUST.[Key] & "'")

VBA

CurrentDb.Execute "mySavedQuery", dbFailOnError

最后,重新考虑将聚合数据保存在源表中,因为您可以随时根据需要查询它们并避免存储资源。


推荐阅读