如何通过添加一个表的多行值来更新一个表的行值?

时间:2016-05-18 14:45:22

标签: mysql

我有一张销售表和一张订单表。

在sales表中,多个行具有相同的订单ID。

我需要通过添加销售表金额来更新订单表金额吗? 订单表ID与销售表订单ID匹配的位置?

销售表

ID   |   amount    |  order_id  |
----------------------------
 1   |       100 |  1 |
 2   |       100 |  1 |
 3   |       300 |  2 |
 4   |       500 |  2 |

订单表

ID   |   amount    
---------------------
 1   |       0.00 
 2   |       0.00  

订单结果:

    ID   |   amount    
    ---------------------
     1   |       200.00 
     2   |       800.00  

2 个答案:

答案 0 :(得分:0)

您可以将updatejoin和子查询一起使用:

update orders o
join (select order_id, sum(amount) amount 
      from sales 
      group by order_id) s on o.id = s.order_id
set o.amount = s.amount

答案 1 :(得分:0)

如果该过程只执行一次,您可以执行TRUNCATE并插入所有数据。

TRUNCATE TABLE order;
INSERT INTO order SELECT order_id, SUM(amount) FROM sales GROUP BY order_id;

如果您必须按顺序保留记录,则可以使用新的计算数据更新值,从sgeddes执行解决方案。

UPDATE orders o
INNER JOIN (SELECT order_id, SUM(amount) amount 
      FROM sales 
      GROUP BY order_id) s ON o.id = s.order_id
SET o.amount = s.amount

如果您想在此期间保留更新,您可以创建一个TRIGGER,以便每次将记录插入销售以更新订单时执行。

DELIMITER $$
CREATE TRIGGER order_trigger
AFTER INSERT ON sales
FOR EACH ROW BEGIN

   -- HERE UPDATE/INSERT VALUES INTO ORDERS.

END $$
DELIMITER ;