我无法使用mysql中同一个表中的列更新列

时间:2014-06-27 12:37:35

标签: mysql

我想用平均列来计算字母等级。

我尝试使用此代码执行此操作:

UPDATE students
SET letter_grade='BA' 
WHERE (average- (select AVG(average)from   students )) > 20 
AND (average-(select AVG(average)from students)) < 25;

但它会出现以下错误:you cant specify target table 'students' for update if FROM clause.

似乎mysql不允许通过使用同一个表中的select来更新表。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

试试这个

UPDATE students
SET letter_grade='BA'
GROUP BY average HAVING (average - avg(average)) > 20
AND (average - avg(average)) < 25

答案 1 :(得分:0)

您可以选择临时表:     Create a temporary table in a SELECT statement without a separate CREATE TABLE 然后使用临时选择进行更新。

CREATE TEMPORARY TABLE avgs( select students.id, average-AVG(average) as a from students);
UPDATE students SET letter_grade='BA' 
    WHERE EXISTS (SELECT a FROM avgs 
                  WHERE students.id =avgs.id AND -20 < a AND a < 25);

答案 2 :(得分:0)

或者将其作为两个查询,例如

declare average_average float
set average_average = AVG(average) from students 
Update students Set Letter_grade = 'BA' 
where (average - average_average) > 20 and (average - average_average) < 25

假设平均值是浮点字段