[英]Update Statement with subquery
我有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.