我正在开发一些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);

任何帮助都将不胜感激。提前谢谢!

最佳答案

以下是对查询的一些简化:
left joins是不必要的。您只需使用join
group by是不必要的。实际上,这是一种误导,因为它表明子查询可能返回多行(这将产生错误)。
Student表是不必要的;您可以将correlation子句目录写入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'
                   );

10-07 23:36