当前位置: 代码迷 >> Sql Server >> “查询选教程C1但不选C2的学生学号”这个代码咋写
  详细解决方案

“查询选教程C1但不选C2的学生学号”这个代码咋写

热度:140   发布时间:2016-04-24 10:27:45.0
“查询选课程C1但不选C2的学生学号”这个代码咋写?
学生选课基本表为  SC(S#,C#,GRADE)    即学号、课程号、成绩

查询选课程C1和C2的学生学号” 是下面代码
SELECT S#
FROM SC AS X,SC AS Y
WHERE X.S#=Y.S# AND X.C#='C1' AND Y.C#='C2'


【那请问 】: “查询选课程C1但不选C2的学生学号” 这个咋写?

开始我想当然的把 Y.C#='C2' 改成 Y.C#!='C2'  ,但发现明显不对 
(ps:感觉 不等号 在这种情况下根本没用处嘛,要它何用啊?)

后来想个笨办法:分别求 选C1课程的学生 和 不选C2课程的学生,再把两者求交集

 不过觉得这个不大好,有没有更直接点求出结果的方法呢? 




------解决方案--------------------
select s#  from sc as a where exists(select 1 from sc where S#=a.S# AND C#='C1')
and not exist(select 1 from sc where S#=a.S# AND C#='C2')

------解决方案--------------------
SELECT  s#
FROM    sc
WHERE   c# = 'C1'
EXCEPT
SELECT  s#
FROM    sc
WHERE   c# = 'C2'
  相关解决方案