0

MySQL の SUM 関数で動作するように操作できないように見えるクエリがあります。

ここに私が欲しいものがあります:

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.シード ID
SET a.amount = a.amount + SUM(s.amount)
WHERE b.status='active' AND a.seedID = s.seedID

今では明らかに、SUM を分離せずに更新で使用することはできません。選択クエリに参加しようとしましたが、頭がよくわかりません。基本的な前提は、特定のアカウントのエリアでそのタイプの合計シードを増やすシード値を持つ複数の建物 (行) があることです。合計がなければ、一致するシード値を持つ建物の 1 つだけを更新します。

4

2 に答える 2

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 ;
于 2012-07-08T14:17:01.313 に答える
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

あなたはそれを試すことができますか?

于 2012-07-08T12:04:28.927 に答える