繁体   English   中英

使用子查询更新语句

[英]Update Statement with subquery

带有子查询的MS Access更新语句

我有Order表和OrderDetails表。 OrderDetails表具有包含数量和小计的订单项。 我想运行一个查询,以使用对应的订单行小计的总和更新“订单”表中的“折扣前总金额”。

我现在的查询如下。 我无法在Access中运行它。 它告诉我:“您编写了一个子查询,可以在不使用主查询FROM子句中的EXISTS保留字的情况下返回多个字段。将子查询的SELECT语句修改为仅请求一个字段。”

UPDATE [Order] INNER JOIN OrderDetails ON Order.ID = OrderDetails.[Order ID]
SET [Order].[Total Amount Before Discount] = 
    (SELECT Order.ID, Sum(OrderDetails.[Subtotal After Discount]) AS [SumOfSubtotal After Discount]
     FROM [Order] INNER JOIN OrderDetails ON Order.ID = OrderDetails.[Order ID]
     GROUP BY Order.ID)
     WHERE (((Order.ID)=[OrderDetails].[Order ID]));

我认为您不需要加入。 怎么样:

UPDATE [Order] 
SET [Order].[Total Amount Before Discount] = 
    (
      SELECT Sum(OrderDetails.[Subtotal After Discount])
      FROM OrderDetails 
      WHERE [Order].ID = OrderDetails.[Order ID]
    )

上面的查询将为“ 订单”表中的每个记录更新“ 折扣前总金额” 如果您只想更新某个订单ID,请使用以下命令:

UPDATE [Order] 
SET [Order].[Total Amount Before Discount] = 
    (
      SELECT Sum(OrderDetails.[Subtotal After Discount])
      FROM OrderDetails 
      WHERE [Order].ID = OrderDetails.[Order ID]
    )
WHERE [Order].ID = 786

您可以在UPDATE查询中使用DSum函数

UPDATE [Order] AS o
SET o.[Total Amount Before Discount] = 
    DSum
        (
            "[Subtotal After Discount]",
            "OrderDetails",
            "[Order ID]=" & o.ID
        );

请注意,如果[Order ID]的数据类型是文本而不是数字,请在DSum表达式中提供的值周围加上引号...

            "[Order ID]='" & o.ID & "'"

两次观察,必须重写UPDATE:重新编写查询,我们得到-如果您仅更新一条记录,则不必关心GROUP BY:

UPDATE [Order]
SET [Order].[Total Amount Before Discount] = 
(Sum(OrderDetails.[Subtotal After Discount])
FROM [Order] INNER JOIN OrderDetails ON Order.ID = OrderDetails.[Order ID]
WHERE (([Order].ID)=[OrderDetails].[Order ID]);

首先,您无法更新JOIN / INNER JOIN ..

其次,您不能以编写语句的方式更新多个列,它必须类似于:

UPDATE [order]
SET    col1 = somevalue,
       col2 = anothervalue
WHERE  (([order].id) = [orderdetails].[Order ID]);  

希望这是有道理的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM