Where 子句中的未知列:Mysql 更新查询
Unknown Column in Where Clause : Mysql Update Query
这是我的更新查询:
update grade
set grade='A'
where (select assignment*0.3+midExam*0.35+finalExam*0.35 as FINALSCORE
from taking) >= 85
and taking.student_id = grade.student_id
and taking.subject_id = grade.subject-id;
结果如下
Unknown column 'taking.student_id' in 'where clause'
我做错了什么?
table taking
在子查询内,在子查询外不可见
根据您的需要,您应该使用带有 join 的更新
update grade
INNER JOIN taking ON taking.student_id=grade.student_id
and taking.subject_id=grade.subject_id
and taking.assignment*0.3+taking.midExam*0.35+taking.finalExam*0.35 >= 85
set grade='A'
通用解决方案
您可以尝试为每个年级添加一个案例
update grade
INNER JOIN taking ON taking.student_id=grade.student_id
and taking.subject_id=grade.subject_id
set grade = (case when taking.assignment*0.3+taking.midExam*0.35+taking.finalExam*0.35 >= 85 THEN 'A'
when taking.assignment*0.3+taking.midExam*0.35+taking.finalExam*0.35 between 60.0 and 84.9 THEN 'B'
ELSE 'C' END)
这是我的更新查询:
update grade
set grade='A'
where (select assignment*0.3+midExam*0.35+finalExam*0.35 as FINALSCORE
from taking) >= 85
and taking.student_id = grade.student_id
and taking.subject_id = grade.subject-id;
结果如下
Unknown column 'taking.student_id' in 'where clause'
我做错了什么?
table taking
在子查询内,在子查询外不可见
根据您的需要,您应该使用带有 join 的更新
update grade
INNER JOIN taking ON taking.student_id=grade.student_id
and taking.subject_id=grade.subject_id
and taking.assignment*0.3+taking.midExam*0.35+taking.finalExam*0.35 >= 85
set grade='A'
通用解决方案
您可以尝试为每个年级添加一个案例
update grade
INNER JOIN taking ON taking.student_id=grade.student_id
and taking.subject_id=grade.subject_id
set grade = (case when taking.assignment*0.3+taking.midExam*0.35+taking.finalExam*0.35 >= 85 THEN 'A'
when taking.assignment*0.3+taking.midExam*0.35+taking.finalExam*0.35 between 60.0 and 84.9 THEN 'B'
ELSE 'C' END)