SQL练习(1)编写UPDATE语句, 计算每位学生的平均分并填写在student表中的avg_grade字段中。

题干:

编写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)

猜你喜欢

转载自blog.csdn.net/m0_62811051/article/details/127659003