2012-04-10 13 views
6

मैं किसी अन्य तालिका से योग के साथ एक तालिका का एक साधारण अपडेट होने का प्रयास कर रहा हूं, लेकिन किसी कारण से, यह केवल एक पंक्ति को अपडेट कर रहा है।किसी अन्य तालिका से SUM के साथ अद्यतन तालिका

खेल

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

playercareer

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

अब अंत में, मैं पिछले तालिका के बाद इस तरह दिखना चाहते हैं: यहाँ क्या तालिकाओं से प्रासंगिक जानकारी की तरह लग रही है अद्यतन चला रहा है:

प्लेयर

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

मैं इस प्रश्न का उत्तर मिल प्रतीत नहीं कर सकते हैं: कैरियर

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

इस क्वेरी मैं कोशिश की है कि केवल पहली पंक्ति को अद्यतन करता है। आपके समय और सलाह के लिए अग्रिम धन्यवाद!

+0

क्या आप SQL सर्वर का उपयोग कर रहे हैं? –

+0

क्षमा करें, मैं MySQL 5.5.16 का उपयोग कर रहा हूं। – BigJay

+3

मैंने SQL सर्वर के साथ अपने कोड का परीक्षण किया और यह ठीक काम करता है (http://sqlfiddle.com/#!3/97125/2)। शायद आपको अपने प्लेयर नामों को सत्यापित करना चाहिए (शायद एक में एक सफेद जगह हो और मैच नहीं बनाया जा सकता है)। आखिरकार, मैं सिफारिश करता हूं कि आप नामों के बजाय आईडी का उपयोग करें और एक रिलेशनल टेबल का उपयोग करें। –

उत्तर

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

हे @bobwienholt यह बहुत अच्छा है लेकिन क्या होगा यदि हमारे पास दोनों टेबलों पर मिलियन पंक्तियां हों। इंडेक्सिंग के लिए हमें किन क्षेत्रों पर विचार करना चाहिए? – hsuk

संबंधित मुद्दे

 संबंधित मुद्दे