2011-09-12 18 views
4

SQLのこのビットを更新スクリプトとして取得しましたが、ワークルを追加して、そのような文はサブクエリを使用しますが、これを動作させるのに苦労します。更新句でrestricttonを取得するためにネストされたサブクエリ(sum)を使用して更新する

Essentialiallyテーブル2のフィールドの合計で表1のvailueを更新する必要がありますが、2つの他のフィールドが2つのテーブルにわたって一致し、field6に基づいて制限が更新句に適用されます。

 UPDATE table1 W SET Field1=(SELECT field2 FROM 
    (SELECT A.id, B.field3, SUM(A.field2) AS field2 
    FROM table2 A, table3 B, table4 P 
    WHERE A.id=B.id AND P.field6=B.field6) B) WHERE W.field6=B.field6 

現実世界の例では、ラグビーのプレーヤーが試合に参加したときに与えられたポイントの合計を選択します。表2は結果(スコアを含む)を有し、表3はチームシートを有し、表1および表4は更新される同じ選手表である。

うまくいけば、これは十分に明確であり、誰かが正しい方向に私を向けることができればと思います。

 UPDATE $WSLKEEP W, $WSLFIX A, $WSLFIXPLAY B 
    SET W.F_CONCEDED=SUM(A.F_AGAINST) 
    WHERE A.F_ID=B.F_GAMEID 
    AND B.F_NAME=W.F_NAME" 

が、今で立ち往生:グループ機能の 不正使用

種類は、更新クエリについて

答えて

5

サブクエリがfield6にグルーピングされ、内部結合の列がtable1で公開されているようです。ここでは、in MySQLことを行う方法は次のとおりです。

UPDATE table1 W 
    INNER JOIN (
    SELECT B.field6, SUM(A.field2) AS field2 
    FROM table2 A, table3 B, table4 P 
    WHERE A.id=B.id AND P.field6=B.field6 
    GROUP BY B.field6 
) B ON W.field6=B.field6 
SET W.Field1 = B.Field2 

そして、我々はそれでありながら、私はまた、カンマを使用して(AB)を控えるためにあなたをお勧めします加わり、明示的に有利に合流します。後者は、長い間別の構文に長い時間慣れてきた当初は珍しいものでしたが、すぐに習慣になり、直感的になりました。トピックについてはA great dealと言われていますが、カンマ結合に関してはかなりの意見があります。私は、コンマ結合でも引き続き使用することができると言います。ただし、条件に参加するときは、現在のANSI構文を選択する必要があります。

ここで明示的に使用するように変換さサブクエリを持つ上記の文では、参加します:ああ、私ははっきりと!私が行くとそれが役立つかどうかを確認することを与える、ということを知りませんでした

UPDATE table1 W 
    INNER JOIN (
    SELECT B.field6, SUM(A.field2) AS field2 
    FROM table2 A 
     INNER JOIN table3 B ON A.id = B.id 
     INNER JOIN table4 P ON P.field6 = B.field6 
    GROUP BY B.field6 
) B ON W.field6 = B.field6 
SET W.Field1 = B.Field2 
+0

本当にありがとう、それは実際に多くの意味があります! :-) – ChelseaStats

2

についてあなたは上記の、あなたが含まれるように許可されているよう

は、次のことを試してみましたUPDATE句内の複数のテーブルを更新する必要はありません。これにより、サブクエリは不要になり、実行速度がかなり向上します。たとえば、次のようなことができます。

UPDATE table1 W, table2 A, table3 B, table4 P 
SET W.Field1 = SUM(A.field2) ... 

は、私はあなたが正確に更新しようとしているかの詳細については不明だけど、私はちょうどあなたが、多くの場合、構文のこの種を使用することにより、サブクエリを避けることができることを出したかったです。

+0

。 – ChelseaStats

+0

現在の状況で更新されたポスト、グループ機能エラーで動作するようにクエリを取得できません。 – ChelseaStats