题干:
编写UPDATE语句, 计算每位学生的平均分并填写在student表中的avg_grade字段中。
表结构:
定义表结构的SQL语句如下:
CREATE TABLE student (
sno varchar(6) NOT NULL ,
sname varchar(10) ,
sex char(2) ,
nation char(2) ,
pnum char(18) ,
birth date ,
phone char(11) ,
dept varchar(20) ,
avg_grade float(4,2),
PRIMARY KEY (sno)
) ;
CREATE TABLE score (
sno varchar(6) NOT NULL,
cno varchar(6) NOT NULL,
term varchar(15),
grade int(11),
PRIMARY KEY (sno,cno)
) ;
表样例
上述表结构对应的表样例,部分数据如下:
student
表:
score
表:
输出样例:
输出样例,部分数据如下:
写这道题的时候出现了一种没有遇到过的错误:
mysql报错:1093 - You can't specify target table 'student' for update in FROM clause
意为:在一条sql语句中不能先查询一个表中的某个值再改变这个表
就是不能在同一张表内查询和修改同时进行
我的代码:直接将查询出来的平均值作为修改内容进行修改
解决办法:把查出来的信息作为一张新的虚拟表,在虚拟表中进行查询工作然后修改student表
ac 源码:
update student
set avg_grade=(
select s.avg_grade from(
select student.sno,round(avg(grade),2) as avg_grade
from score,student
where score.sno = student.sno
group by student.sno
)s
where student.sno = s.sno)