2012-04-10 16 views
6

Sto provando a quello che pensavo sarebbe stato un semplice aggiornamento di una tabella con la somma di un'altra tabella, ma per qualche motivo, è solo l'aggiornamento di una riga. Ecco cosa le informazioni pertinenti dalle tabelle assomigliare:Aggiorna tabella con SUM da un'altra tabella

giochi

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

playercareer

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

Ora in ultima analisi, vorrei l'ultima tabella a guardare come questo dopo eseguendo l'aggiornamento:

player carriera

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

Questa è la query ho tentato che aggiorna solo la prima riga:

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

io non riesco a trovare la risposta a questa. Grazie in anticipo per il tuo tempo e i tuoi consigli!

+0

Si sta utilizzando SQL Server? –

+0

Scusa, sto usando MySQL 5.5.16. – BigJay

+3

Ho testato il codice con SQL Server e funziona correttamente (http://sqlfiddle.com/#!3/97125/2). Forse dovresti verificare i nomi dei tuoi giocatori (forse uno ha uno spazio bianco e la partita non può essere fatta). In definitiva, ti consiglio di utilizzare ID anziché Nomi e di utilizzare una tabella relazionale. –

risposta

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 questo è ottimo ma cosa succede se abbiamo milioni di righe su entrambi i tavoli. Quali campi dovremmo considerare per l'indicizzazione? – hsuk

Problemi correlati