我正在开发一些MySQL,但遇到了一些问题。
我试图用学生正确的学分来更新专栏,但是目前我计算学分时,我得到所有学生的学分总数。我
学生表
ID varchar(5)
name varchar(20)
dept_name varchar(20)
tot_cred decimal(3,0)
拿表
ID varchar(5)
course_id varchar(8)
sec_id varchar(8)
semester varchar(6)
year decimal(4,0)
grade varchar(2)
课程表
course_id varchar(8)
title varchar(50)
dept_name varchar(20)
credits decimal(2,0)
这是我目前正在使用的声明。我还必须添加if they have an f then they don't get credit for the class that they took
update studentCopy set tot_cred = (
select sum(course.credits)
from student
left join takes on student.ID = takes.ID
left join course on takes.course_id = course.course_id
where student.ID = student.ID
group by studentCopy.ID);
非常感谢任何帮助。提前谢谢!
答案 0 :(得分:2)
以下是您的查询的一些简化:
left join
是不必要的。您可以使用join
。group by
是不必要的。实际上,它具有误导性,因为它表明子查询可能返回多行(这会产生错误)。Student
表是不必要的;您可以将关联子句目录写入takes
。所以,我会把你的查询写成:
update studentCopy sc
set tot_cred = (select sum(c.credits)
from takes t join
course c
on t.course_id = c.course_id
where sc.ID = t.ID
);
您可以在where
子句中添加成绩条件:
update studentCopy sc
set tot_cred = (select sum(c.credits)
from takes t join
course c
on t.course_id = c.course_id
where sc.ID = t.ID and grade <> 'f'
);
答案 1 :(得分:0)
我实际上刚刚收到了部分答案。我改变了
where student.ID = student.ID
到
where studentCopy.ID = student.ID
给我自己学分的结果。只是努力获得等级=&#39; F&#39;然后不要计算成绩。