2011-04-12 86 views
2
SELECT quotes.qid, SUM(qitems.net_cost_ext) 
FROM quotes, qitems 
WHERE quotes.qid = qitems.qid 
GROUP BY qitems.qid; 

UPDATE quotes, qitems 
SET quotes.net_cost_total = SUM(qitems.net_cost_ext) 
WHERE quotes.qid = qitems.qid 
GROUP BY qitems.qid; 

上面的select語句總結了每個報價單上所有產品的淨成本,並通過報價單數字顯示總和。如何將我的select語句轉換爲update語句?

我在引號表中添加了一個net_cost_total字段。我想用每個報價中的net_cost總計更新所有報價。查詢失敗,它說GROUP語法不好,我不知道該怎麼辦。

回答

5

試試這個:

UPDATE quotes AS q 
     JOIN (SELECT quotes.qid, 
         SUM(qitems.net_cost_ext) AS SUM 
        FROM quotes, 
         qitems 
        WHERE quotes.qid = qitems.qid 
        GROUP BY qitems.qid) AS d 
     ON d.qid = q.qid 
SET q.net_cost_total = d.SUM 
+0

此解決方案大。我不知道連接可以做到這一點...我一直使用它們進行簡單的表連接。如果我理解正確,您可以根據加入語句中的select語句創建qitems表的自定義版本... – payling 2011-04-12 18:58:41

+0

它從select中被稱爲派生表。那()實際上包含了一個虛擬表。 – Pentium10 2011-04-12 19:47:10

1

嘗試:

UPDATE quotes 
INNER JOIN (
    SELECT SUM(qitems.net_cost_ext) AS s 
    FROM qitems 
    GROUP BY qitems.qid 
) q USING(qid) 
SET net_cost_total = q.s 

0

使用標準的SQL(從最後一個MySQL的評論here啓發):

UPDATE quotes 
    SET net_cost_total = (
         SELECT SUM(net_cost_ext) 
          FROM qitems 
          WHERE quotes.qid = qitems.qid 
         ) 
WHERE EXISTS (
       SELECT * 
       FROM qitems 
       WHERE quotes.qid = qitems.qid 
      );