2012-11-04 16 views
5

से परिणाम के आधार पर मेरे पास निम्न क्वेरी:अद्यतन एक तालिका में कई पंक्तियों सबक्वेरी

SELECT 
    stat.mcq_id, 
    ROUND(stat.total_score/stat.num_taken, 2) AS avg_score 
    FROM (
     SELECT 
     user_mcq.mcq_id, 
     SUM(score) AS total_score, 
     COUNT(user_mcq.id) AS num_taken 
     FROM user_mcq 
     INNER JOIN user ON (user.id = user_mcq.user_id) 
     WHERE user.level_id =3 
     AND user_mcq.is_complete =1 
     GROUP BY user_mcq.mcq_id 
    ) AS stat 

यह पैदा करता है:

mcq_id avg_score 
1  5.75 
2  9.22 
6  8.81 
7  8.94 
14  7.00 
16  9.46 

मैं अद्यतन करने के लिए एक और तालिका का उपयोग कर mcq कहा जाता है इस का उपयोग करना चाहेंगे mcq_id परिणाम से mcq.id

मैंने निम्नलिखित कोशिश की है, लेकिन सफलता के बिना:

UPDATE mcq SET mcq.avg_score = stats.avg_score FROM (
    SELECT 
    stat.mcq_id, 
    ROUND(stat.total_score/stat.num_taken, 2) AS avg_score 
    FROM (
     SELECT 
     user_mcq.mcq_id, 
     SUM(score) AS total_score, 
     COUNT(user_mcq.id) AS num_taken 
     FROM user_mcq 
     INNER JOIN user ON (user.id = user_mcq.user_id) 
     WHERE user.level_id =3 
     AND user_mcq.is_complete =1 
     GROUP BY user_mcq.mcq_id 
    ) AS stat 
) AS stats 
WHERE mcq.id = stats.mcq_id; 

यह देता है:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (SELECT stat.mcq_id, ROUND(stat.total_score/stat.num_taken, 2) A' at line 1 

उत्तर

12

मुझे लगता है कि आप में सक्षम तालिका के साथ शामिल होने और नीचे के रूप में स्तंभ को अद्यतन का उपयोग कर सकते हैं:

UPDATE mcq, 
     (SELECT 
      stat.mcq_id, 
      ROUND(stat.total_score/stat.num_taken, 2) AS avg_score 
      FROM (SELECT 
        user_mcq.mcq_id, 
        SUM(score) AS total_score, 
        COUNT(user_mcq.id) AS num_taken 
        FROM user_mcq 
        INNER JOIN user ON (user.id = user_mcq.user_id) 
        WHERE user.level_id =3 
        AND user_mcq.is_complete =1 
        GROUP BY user_mcq.mcq_id 
      ) AS stat 
     ) AS stats 
SET mcq.avg_score = stats.avg_score 
WHERE mcq.mcq_id = stats.mcq_id; 
+0

बिल्कुल सही, बहुत धन्यवाद! :) – Adam

+0

अच्छा .. यह वास्तव में मेरा समय बचा है .. – faruk

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