2012-09-23 76 views
8

我有兩個表: ITEMS與數量和unit_price(id |名稱| order_id | qt | unit_price) 和表ORDERSMySQL UPDATE SELECT SUM來自不同的表

我想要UPDATEordersorders.total_price sum of multiplications qt*unit_price在相同的訂單,以獲得訂單的總價格。

上的項目表中的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) 
+0

請顯示你的完整查詢你在做什麼,如mysql_query(「查詢」) –

+1

我現在在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「 – Milosz

回答

13

你可以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] 
+0

謝謝。 [WHERE謂詞]應該說什麼?沒有這影響0行和「WHERE o.id = i.order_id」也影響0行。 – Milosz

+0

@ user1692064只有當這個條件爲真時,你纔可以使用'WHERE'子句來提供額外的條件來更新你指定的列,注意這個子句是可選的,如果你需要它可以寫。也有0行受到影響,因爲可能沒有字段滿足連接條件是'ON o.id = i.order_id' –

+0

我很抱歉,這是我缺乏知識,phpmyadmin中的mysql忽略「受影響的值」這些記錄已具有相同的值。我之前必須在所有記錄中都有正確的值,並且玩過幾個不同的查詢。謝謝。 – Milosz