You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于其他表的乘积总和更新Order1表的Total Price列?

问题描述

我有三张表:Order1、Contains、Product,需要计算Order1中每个订单的总价(该订单下所有产品的数量×价格之和),并将计算结果更新到Order1的Total Price列。

各表结构如下:

Order1表

Order_IDTotal Price
1NULL
2NULL

Contains表

Order_IDBarcodeQuantity
1122
1341
2564

Product表

BarcodePrice
125
341
566

我已经能通过以下查询语句生成包含Order_ID和对应总价的结果集,但不知道如何用UPDATE语句把结果更新到Order1表:

SELECT  ORDER1.ORDER_ID, SUM(Quantity*Selling_Price) AS "Total"
FROM PRODUCT, IS_PRESENT_IN, Order1
WHERE PRODUCT.BARCODE = IS_PRESENT_IN.BARCODE AND ORDER1.ORDER_ID = IS_PRESENT_IN.ORDER_ID 
GROUP BY order1.ORDER_ID
ORDER BY SUM(Quantity*Selling_price) ;
解决方案

可以通过UPDATE结合子查询/关联查询的方式实现,根据不同SQL方言提供两种常用写法:

写法一:关联查询式UPDATE(适配MySQL、PostgreSQL等)

UPDATE Order1 o
JOIN (
    SELECT 
        c.Order_ID,
        SUM(c.Quantity * p.Price) AS total_price
    FROM Contains c
    JOIN Product p ON c.Barcode = p.Barcode
    GROUP BY c.Order_ID
) calc ON o.Order_ID = calc.Order_ID
SET o.`Total Price` = calc.total_price;

写法二:子查询赋值式UPDATE(适配SQL Server等)

UPDATE Order1
SET [Total Price] = (
    SELECT SUM(c.Quantity * p.Price)
    FROM Contains c
    JOIN Product p ON c.Barcode = p.Barcode
    WHERE c.Order_ID = Order1.Order_ID
)
WHERE EXISTS (
    SELECT 1
    FROM Contains c
    WHERE c.Order_ID = Order1.Order_ID
);

补充说明

  • 你原查询中的IS_PRESENT_IN应为笔误,已替换为实际的Contains表
  • 子查询部分负责计算每个订单的总价,通过Order_ID与Order1表关联后更新对应字段
  • WHERE EXISTS子句用于避免更新无对应产品的订单,防止NULL覆盖原有有效数据

内容的提问来源于stack exchange,提问作者CoffeeBean

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:10:16