【问题标题】:MySQL UPDATE with SELECT SUM from different tableMySQL UPDATE 与来自不同表的 SELECT SUM
【发布时间】: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"

标签: mysql sql join sql-update


【解决方案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 在“受影响的值”中忽略了那些已经具有相同值的记录。我之前必须在所有记录中都有正确的值,玩过几个不同的查询。谢谢。
猜你喜欢
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 2012-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多