使用select sum从另一个表更新表

bjp0bcyl  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(286)

我有两个表:orders和order\u items。我需要用xpto品牌(order\u items表中描述的项目)的项目花费总和更新xpto\u-spend-on-orders表列。
我当前的查询从mysql服务器返回超时。timetou设置为28800秒。

UPDATE orders
SET orders.xpto_spent = (
    select 
    format( sum(total), 2) as xpto_spent
    from order_items
    where order_items.brand = "XPTO"
    AND orders.order_id = order_items.order_id
    group by order_items.order_id
);

任何帮助都将不胜感激!谢谢您!

cdmah0mi

cdmah0mi1#

你可以加入这张table orders 返回 order_items :

UPDATE orders o
INNER JOIN (
    SELECT order_id, FORMAT(SUM(total), 2) AS xpto_spent
    FROM order_items
    WHERE brand = 'XPTO'
    GROUP BY order_id
) t ON o.order_id = t.order_id
SET o.xpto_spent = t.xpto_spent
kuarbcqp

kuarbcqp2#

你通常会用 join ,但可以使用相关子查询:

UPDATE orders o
    SET o.xpto_spent = (SELECT SUM(oi.total)
                        FROM order_items oi
                        WHERE oi.brand = 'XPTO' AND
                              oi.order_id = o.order_id
                       );

对于这个查询,您需要一个索引 order_items(order_id, brand, total) . 这可能会加快你的查询速度。

相关问题