2012-04-10 18 views
6

Başka bir tablodaki toplamı içeren bir tablonun basit bir güncelleştirmesi olacağını düşündüğüm şeyi deniyorum, ancak bazı nedenlerden dolayı yalnızca bir satırı güncelleştiriyor.Başka bir tablodan SUM ile güncelleştirme tablosu

oyunlar

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

playercareer

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

Şimdi sonuçta, ben sonra böyle bakmak son tablo istiyorum: Burada tablolardan ilgili bilgiler böyle görünüyor güncelleştirmeyi çalıştırma:

player Bunun cevabını bulmak için görünmüyor olabilir

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

: kariyer

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

Bu sadece ilk sırayı güncelleyen teşebbüs sorgusu olur. Zaman ve tavsiye için şimdiden teşekkür ederiz!

+0

SQL Server kullanıyor musunuz? –

+0

Üzgünüm, MySQL 5.5.16 kullanıyorum. – BigJay

+3

Kodunuzu SQL Server ile test ettim ve iyi çalışıyor (http://sqlfiddle.com/#!3/97125/2). Belki de oyuncu isimlerini doğrulamalısınız (belki birinin beyaz bir alanı vardır ve maç yapamazsınız). Sonuç olarak, Adlar yerine kimlikler kullanmanız ve ilişkisel bir tablo kullanmanız önerilir. –

cevap

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 bu harika ama ne olursa olsun her iki masada da milyonlarca satır var. İndeksleme için hangi alanları dikkate almalıyız? – hsuk

İlgili konular