【问题标题】:how to use another table\query inside an update query如何在更新查询中使用另一个表\查询
【发布时间】:2015-05-09 02:34:39
【问题描述】:

我尝试使用另一个表中的数据进行 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];

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

编辑:我试图将查询视为自己的表,这是我的问题,在更新查询访问中加入表不是问题

【问题讨论】:

  • 更新(临时)表有什么用?如果您想更改表,请向我们展示您的数据库结构以及您要根据哪些条件更改哪些行。

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


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    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];
    

    【讨论】:

      猜你喜欢
      • 2014-12-02
      • 1970-01-01
      • 2015-08-03
      • 2021-07-11
      • 2021-08-22
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      相关资源
      最近更新 更多