2012-04-10 18 views
6

Ich versuche, was ich dachte, wäre eine einfache Aktualisierung einer Tabelle mit der Summe aus einer anderen Tabelle, aber aus irgendeinem Grund ist es nur eine Zeile aktualisieren. Hier ist, was die relevanten Informationen aus den Tabellen wie folgt aussehen:Update-Tabelle mit SUM aus einer anderen Tabelle

Spiele

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

playercareer

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

Nun schließlich, würde ich die letzte Tabelle wie folgt aussehen wie nach Ausführen des Updates:

Spieler Karriere

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

Dies ist die Abfrage, die ich, dass nur versucht, aktualisiert die erste Reihe:

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

Ich kann nicht die Antwort auf diese Frage zu finden scheinen. Vielen Dank im Voraus für Ihre Zeit und Rat!

+0

Verwenden Sie SQL Server? –

+0

Tut mir leid, ich benutze MySQL 5.5.16. – BigJay

+3

Ich habe Ihren Code mit SQL Server getestet und es funktioniert einwandfrei (http://sqlfiddle.com/#!3/97125/2). Vielleicht sollten Sie Ihre Spielernamen überprüfen (vielleicht hat einer einen Leerraum und die Übereinstimmung kann nicht hergestellt werden). Letztendlich würde ich empfehlen, IDs anstelle von Names zu verwenden und eine relationale Tabelle zu verwenden. –

Antwort

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 das ist toll aber was ist, wenn wir Millionen Zeilen auf beiden Tischen haben. Welche Felder sollten wir für die Indexierung berücksichtigen? – hsuk

Verwandte Themen