2012-04-10 12 views
6

私は、別のテーブルの合計でテーブルを単純に更新しようと思っていましたが、何らかの理由で1つの行しか更新していません。ここではテーブルから関連する情報がどのように見えるかです:別のテーブルからSUMを使ってテーブルを更新する

ゲーム

gameplayer|points 
---------------- 
John  |5 
Jim  |3 
John  |3 
Jim  |4 

playercareer

playercareername|playercareerpoints 
----------------------------------- 
John   |0 
Jim    |0 

今、最終的に、私は後にこのように見えるように、最後のテーブルを希望アップデートを実行中:

player私はこの答えを見つけることができないよう

UPDATE playercareer 
SET playercareer.playercareerpoints = 
    (
SELECT 
    SUM(games.points) 
FROM games 
    WHERE 
    playercareer.playercareername=games.gameplayer 
    ) 

:キャリア

playercareername|playercareerpoints 
----------------------------------- 
John   |8 
Jim    |7 

これは私が最初の行のみを更新することを試みたクエリがあります。あなたの時間とアドバイスをお寄せいただきありがとうございます!

+0

SQL Serverを使用していますか? –

+0

申し訳ありませんが、私はMySQL 5.5.16を使用しています。 – BigJay

+3

私はあなたのコードをSQL Serverでテストしたところ、うまく動作します(http://sqlfiddle.com/#!3/97125/2)。おそらくあなたはあなたのプレイヤーの名前を確認するべきです(多分1つは空白があり、一致することはできません)。最終的には、名前の代わりにIDを使用し、リレーショナルテーブルを使用することをおすすめします。 –

答えて

16
UPDATE playercareer c 
INNER JOIN (
    SELECT gameplayer, SUM(points) as total 
    FROM games 
    GROUP BY gameplayer 
) x ON c.playercareername = x.gameplayer 
SET c.playercareerpoints = x.total 
+0

ちょっと@bobwienholtこれは素晴らしいですが、両方のテーブルに100万行もあればどうでしょうか?インデックス作成にはどのフィールドを考慮する必要がありますか? – hsuk

関連する問題