带有count的select语句的mysql update table列

时间:2014-11-16 00:18:43

标签: mysql select join sql-update

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

非常感谢任何帮助。提前谢谢!

2 个答案:

答案 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;然后不要计算成绩。