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

simaqingtian 2014-07-01 10:24:28
学生选课基本表为 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课程的学生,再把两者求交集

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



...全文
1137 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
simaqingtian 2014-07-02
  • 打赏
  • 举报
回复
引用 4 楼 xiaoxiangqing 的回复:
1楼的就可以
一楼太长了 思路也是我会的了
simaqingtian 2014-07-02
  • 打赏
  • 举报
回复
引用 2 楼 DBA_Huangzj 的回复:
SELECT  s#
FROM    sc
WHERE   c# = 'C1'
EXCEPT
SELECT  s#
FROM    sc
WHERE   c# = 'C2'
这个秒啊 我咋没想到咧 学c1的减去学c2的 通俗易懂代码简单
xiaoxiangqing 2014-07-02
  • 打赏
  • 举报
回复
1楼的就可以
simaqingtian 2014-07-02
  • 打赏
  • 举报
回复
引用 1 楼 fredrickhu 的回复:
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')
这个和我说的一样啊
發糞塗牆 2014-07-02
  • 打赏
  • 举报
回复
SELECT  s#
FROM    sc
WHERE   c# = 'C1'
EXCEPT
SELECT  s#
FROM    sc
WHERE   c# = 'C2'
--小F-- 2014-07-01
  • 打赏
  • 举报
回复
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')

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧