2012-04-10 18 views
6

Próbuję zrobić to, co moim zdaniem miało być prostą aktualizacją tabeli z sumą z innej tabeli, ale z jakiegoś powodu jest to tylko aktualizacja jednego wiersza. Oto co istotne informacje z tabel wyglądać następująco:Zaktualizuj tabelę z SUM z innej tabeli

gier

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

playercareer

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

Teraz ostatecznie chciałbym ostatnia tabela wyglądać tak po aktualizacja:

gracz kariera

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

To zapytanie próbowałem że tylko aktualizuje pierwszego rzędu:

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

nie mogę wydawać się znaleźć odpowiedź na to pytanie. Z góry dziękujemy za poświęcony czas i radę!

+0

Czy używasz programu SQL Server? –

+0

Przepraszamy, używam MySQL 5.5.16. – BigJay

+3

Przetestowałem twój kod z SQL Server i działa dobrze (http://sqlfiddle.com/#!3/97125/2). Może powinieneś zweryfikować swoje nazwy graczy (być może ma białe spacje i nie można wykonać meczu). Ostatecznie polecam używanie identyfikatorów zamiast nazw i używanie tabel relacyjnych. –

Odpowiedz

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

hej @bobwienholt to jest świetne, ale co jeśli mamy miliony wierszy na obu stołach. Które pola powinniśmy uwzględnić przy indeksowaniu? – hsuk

Powiązane problemy