SQLITE/查找所有在2010年春季之前没有参加任何课程的学生的ID和姓名



问题:查找2010年春季之前未参加任何课程的所有学生的ID和姓名。

[takes]

ID    course_id    year (only two data : 2009,2010)
101   CS-400       2009
202   CS-347       2010
303   PHY-191      2009
...
...

[student]

ID    NAME
101   JUN
202   TYO
303   EOA
......
......

[section]

course_id year
CS-400    2009
CS-347    2010
PHY-191   2009
....
...

我想找到那个2009年没有上过课但2010年才上的人。

我的代码

select distinct id,name
from student as S
where not exists(select course_id from section where year=2009
except
select T.course_id from takes as T where S.ID=T.ID);

但是结果是空的。

您可以加入studenttakes,按学生分组,并在HAVING子句中设置条件:

select s.id, s.name 
from student s
inner join takes t on t.id = s.id
group by s.id, s.name 
having min(t.year) = 2010

如果你只对2009年和2010年感兴趣,你也可以添加WHERE条款:

select s.id, s.name 
from student s
inner join takes t on t.id = s.id
where t.year in (2009, 2010) 
group by s.id, s.name 
having min(t.year) = 2010

最新更新