2012-07-08 46 views
0

我有一個查詢,我似乎無法操縱的SUM函數工作在MySQL:與另一個表的合計值的MySQL更新表

下面是我想:

UPDATE account_seeds AS一個
INNER JOIN b爲b ON b.accountID = a.accountID AND a.areaID = b.areaID
INNER JOIN b_seed爲S ON s.buildingID = b.buildingID
INNER JOIN seed_class AS C對C .seedID = s.seedID
SET a.amount = a.amount + SUM(s.amount)
WHERE b.status = '主動' AND a.seedID = s.seedID

現在它顯然不會讓我用SUM在更新中不分離它。我已經嘗試加入選擇查詢,但不能完全讓我的頭。基本前提是我擁有​​多個建築物(行),這些建築物的種子值會增加特定帳戶在該區域的總種子數。如果沒有和它僅更新具有匹配的種子值

回答

2
UPDATE 
    account_seeds AS a 
    INNER JOIN 
    (SELECT b.accountID, b.areaID, s.seedID 
      , SUM(s.amount) AS add_on 
     FROM b AS b 
     INNER JOIN b_seed AS s 
      ON s.buildingID = b.buildingID 
     INNER JOIN seed_class AS c 
      ON c.seedID = s.seedID 
     WHERE b.status = 'active' 
     GROUP BY b.accountID, b.areaID, s.seedID 
    ) AS g 
    ON g.accountID = a.accountID 
    AND g.areaID = a.areaID 
    AND g.seedID = a.seedID 
SET 
    a.amount = a.amount + g.add_on ; 
1

也許你可以使用一個嵌套查詢的建築之一:

UPDATE account_seeds AS a 
INNER JOIN b AS b ON b.accountID = a.accountID AND a.areaID = b.areaID 
INNER JOIN b_seed AS s ON s.buildingID = b.buildingID 
INNER JOIN seed_class AS c ON c.seedID = s.seedID 
SET a.amount = a.amount + (SELECT SUM(amount) FROM b_seed) 
WHERE b.status='active' AND a.seedID = s.seedID 

你可以試試嗎?