萌战吧 关注:962,569贴子:31,587,319

战万,关于sql except子句

只看楼主收藏回复

--刚学数据库,作业有道习题问『查询没有学全所有课的同学的学号、姓名』
select sno,sname from stu
except
select sno,sname from stu a
where not exists(select cno from sc b
where not exists(select sno,cno
from (select sno,cno from stu natural join sc)
where sno=a.sno and cno=b.cno)
)
--明明两个select语句都能成功查值,为何except会失败
--附表
stu:
sno
sname
sc:
sno
cno


1楼2017-11-02 20:38回复
    报错信息有吗


    IP属地:北京来自Android客户端2楼2017-11-02 20:56
    收起回复
      一个group by having就能搞定的语句为什么会写的这么复杂


      来自Android客户端3楼2017-11-02 21:06
      收起回复
        SELECT stu.sno, stu.sname
        FROM stu
        LEFT OUTER JOIN sc
        ON stu.sno = sc.sno
        GROUP BY stu.sno, stu.sname
        HAVING COUNT(DISTINCT sc.cno) < (SELECT COUNT(DISTINCT sc.cno) FROM sc)


        IP属地:中国香港来自Android客户端4楼2017-11-02 21:14
        收起回复
          厉害


          IP属地:山东来自iPhone客户端5楼2017-11-02 21:35
          回复
            首先,你要告诉我你用什么数据库
            例如,mysql就不支持except


            IP属地:浙江6楼2017-11-02 21:39
            收起回复
              看到第三行选择了放弃。。


              IP属地:江苏7楼2017-11-02 21:46
              回复
                已解决
                垃圾oracle里差应该用minus


                8楼2017-11-02 22:02
                回复
                  为啥弄这么复杂


                  IP属地:上海10楼2017-11-02 22:27
                  回复
                    0分


                    IP属地:广东来自Android客户端11楼2017-11-02 23:44
                    回复
                      看得我头皮发麻


                      IP属地:福建来自Android客户端12楼2017-11-02 23:45
                      回复
                        求求楼主放过数据库吧


                        IP属地:云南来自Android客户端13楼2017-11-03 05:14
                        回复
                          except是sqlserver的关键字啊,oracle没有


                          IP属地:福建来自iPhone客户端14楼2017-11-03 06:26
                          回复
                            我也正好做sql的作业


                            IP属地:上海来自iPhone客户端15楼2017-11-03 07:23
                            回复