2012-04-10 44 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