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
。
我想UPDATE
表orders
并在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】:你可以UPDATE
和JOIN
两个表:
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的主要内容,如果未能解决你的问题,请参考以下文章