MySQL UPDATE 与来自不同表的 SELECT SUM

Posted

技术标签:

【中文标题】MySQL UPDATE 与来自不同表的 SELECT SUM【英文标题】:MySQL UPDATE with SELECT SUM from different table 【发布时间】:2012-09-15 02:32:44 【问题描述】:

我有两张桌子: ITEMS 带有数量和单价(id | name | order_id | qt | unit_price) 和表ORDERS

我想UPDATEorders 并在orders.total_price sum of multiplications qt*unit_price 放置相同的订单以获得订单的总价。

对 items 表的 SELECT 查询非常简单,并且可以很好地为同一 order_id 中的所有项目提供总和:

SELECT SUM(items.qt*items.unit_price) from items GROUP by items.order_id

但是我不能在我的ORDERS 表中插入这个值。我无法完成这项工作:

UPDATE orders, items SET orders.total_price = (SELECT SUM(items.qt*items.unit_price)
FROM items GROUP BY items.order_id) WHERE orders.id = items.order_id

它返回"Subquery returns more than 1 row"

我发现了一个非常相似的问题here,但答案对我也不起作用:

UPDATE orders SET orders.t_price = (SELECT SUM(items.qt*items.unit_price) from items WHERE orders.id = items.order_id)

【问题讨论】:

请显示您的完整查询,例如 mysql_query("query") 我现在在 phpmyadmin 中这样做,所以上面的第二个查询是我尝试的实际查询:“UPDATE orders, items SET orders.total_price = (SELECT SUM(items.qt*items.unit_price) FROM items GROUP BY items.order_id) WHERE orders.id = items.order_id" 【参考方案1】:

你可以UPDATEJOIN两个表:

UPDATE Orders o 
INNER JOIN
(
   SELECT order_id, SUM(qt * unit_price) 'sumu'
   FROM items 
   GROUP BY order_id
) i ON o.id = i.order_id
SET o.total_price = i.sumu
[WHERE predicate]

【讨论】:

谢谢。 [WHERE 谓词] 应该说什么?没有它会影响 0 行,而使用“WHERE o.id = i.order_id”也会影响 0 行。 @user1692064 你可以使用WHERE 子句提供额外的条件来更新你指定的列,只有当这个条件为真时,注意这个子句是可选的,如果你需要它就写。还有 0 行受到影响,因为可能没有字段满足连接条件 ON o.id = i.order_id 对不起,我不知道 phpmyadmin 中的 mysql 在“受影响的值”中忽略了那些已经具有相同值的记录。我之前必须在所有记录中都有正确的值,玩过几个不同的查询。谢谢。

以上是关于MySQL UPDATE 与来自不同表的 SELECT SUM的主要内容,如果未能解决你的问题,请参考以下文章

从具有多个条目的另一个表更新MYSQL

如何组合来自4个mysql表的数据

来自两个不同表的Mysql计数和总和

匹配来自不同表的行 - MySQL

计算来自 2 个不同表的 2 行之间的不匹配 - MySQL

我如何将来自 3 个具有唯一 ID 的不同表的结果组合到 mysql 中