如何在更新查询中使用另一个表\查询

时间:2015-03-07 15:37:38

标签: sql sql-update project ms-access-2013

我尝试使用另一个表中的数据进行UPDATE查询 在我的情况下,这是一个查询的结果,它看起来像这样:

UPDATE CalculatedQueryINNER JOIN Orders 
ON CalculatedQuery.orderid = Orders.OrderID 
SET Orders.TotalPrice = [CalculatedQuery].[calculated];

但它不起作用,它显示错误必须使用可更新的查询

但是我把查询中的结果复制到一个名为temp的表中,我也做了同样的工作!!

UPDATE temp INNER JOIN Orders 
ON temp.orderid = Orders.OrderID 
SET Orders.TotalPrice = [temp].[calculated];

任何人都可以向我提供有关如何将查询用作表格的解决方案 请?

编辑:我试图将查询看作是一个独立的表,这是我的问题,在更新查询无法访问时加入表不是问题

2 个答案:

答案 0 :(得分:0)

我通过不同的网站阅读了很多内容 我介绍的问题在访问中无法解决。 更新查询存在问题,因为它们在访问时不是标准的。 问题是在访问中你不能在更新语句中使用另一个sql查询,因为我读取任何使用group by或join或select select等内容的查询。被标记为unupdateable查询,你不能使用它们。 正如我读到的那样,我发现了一些像我一样使用临时表的好解决方案 或者使用dlookup()函数。

答案 1 :(得分:0)

请记住,您还可以使用' FROM'执行DELETE和UPDATE语句,这将有助于以更熟悉的语法编写查询。鉴于您正在运行上面两个非常不同的更新语句,我在这里重写了它们。另外,鉴于您在两个语句上都使用了内连接,这两个语句执行数据的交叉,我按照更新的顺序重新排列了表格。

UPDATE O
SET    [TotalPrice] = [T].[calculated]
FROM   [Orders] AS O
       INNER JOIN [temp] AS T
           ON [T].[orderid] = [O].[OrderID];

UPDATE O
SET    [TotalPrice] = [CQ].[calculated]
FROM   [Orders] as O
          INNER JOIN [CalculatedQuery] as CQ
              ON [CQ].[orderid] = [O].[OrderID];

在这种语法中设置更新(以及同样删除)非常灵活,因为它允许另一个不错的功能:运行选择以查看将要更改的数据:

SELECT [O].[TotalPrice]
    ,  [T].[calculated]
FROM   [Orders] AS O
       INNER JOIN [temp] AS T
           ON [T].[orderid] = [O].[OrderID];

SELECT [O].[TotalPrice], 
    ,  [CQ].[calculated]
FROM   [Orders] as O
          INNER JOIN [CalculatedQuery] as CQ
              ON [CQ].[orderid] = [O].[OrderID];
相关问题