2012-04-10 41 views
6

我想要什麼,我想是一個表與另一個表的總和的簡單更新,但由於某種原因,它只是更新一行。以下是從表中的相關信息如下所示:更新表與另一個表中的SUM

遊戲

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

playercareer

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

現在最後,我想最後的表看起來像這樣後運行更新:

player職業

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

這是我嘗試,只有更新的第一行查詢:

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

我似乎無法找到這個問題的答案。預先感謝您的時間和建議!

+0

您使用的是SQL Server嗎? – 2012-04-10 15:11:51

+0

對不起,我正在使用MySQL 5.5.16。 – BigJay 2012-04-10 15:17:17

+3

我用SQL Server測試了你的代碼,它工作正常(http://sqlfiddle.com/#!3/97125/2)。也許你應該驗證你的玩家名字(也許有一個空白區域,並且不能進行匹配)。最終,我建議您使用ID而不是名稱並使用關係表。 – 2012-04-10 15:18:59

回答

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

hey @bobwienholt這很棒,但如果我們在兩張桌子上都有一百萬行,會怎麼樣。我們應該考慮哪些字段用於索引? – hsuk 2018-03-01 17:08:06