建立学生-课程数据库,其中有以下三个关系表,并输入数据:
STUDENT(学生)
SNO(学号) SNAME(姓名)
421 周宁
123 王平
120 王力
119 李维
203 林美
COURSE(课程)
CNO(课程号) SEMESTER(开课学期)
CS-110 秋
CS-201 春
CS-221 秋
EE-122 秋
EE-201 春
SC(选课)
SNO CNO GRADE
421 CS-110 90
421 EE-201 100
123 EE-122 91
123 EE-201 83
123 CS-110 73
120 CS-110 95
119 CS-110 72
119 CS-201 65
203 CS-110 82.5
203 CS-201 80
203 EE-201 75
查询选课门数唯一的学生的姓名(选课门数与其他同学都不相同)。
请高手赐教!

解决方案 »

  1.   

    选课门数与其他同学都不相同---就是这门课只有一个人选?
    如果是这样select sno,count(*) as count from sc group by  cno having count(*) =1
      

  2.   

    select a.SNO
    from 
    (
    select SNO,count(*) as cnt
    from SC
    group by SNO) a 
    inner join 
    (
    select cnt 
    from (
    select SNO,count(*) as cnt
    from SC
    group by SNO)
    group by cnt
    having count(*)=1) b
    on a. cnt = b.cnt[align=center]====  ====
    [/align]
      

  3.   

    回楼上的,首先谢谢回答,但是运行提示Every derived table must have its own alias请问怎么解决?
      

  4.   

    try again select a.SNO
    from 
        (select SNO,count(*) as cnt
        from SC
        group by SNO) a 
        inner join 
        (
            select cnt 
            from (
                select SNO,count(*) as cnt
                from SC
                group by SNO) c
            group by cnt
            having count(*)=1) b
        on a. cnt = b.cnt[align=center]====  ====
    [/align]
      

  5.   

    由于您是新用户,所以特此介绍一下结贴的方法
    如果您问题已经得解决,请您及时结帖给分,以感谢帮助您的朋友。 结帖方法:点击版面右上方或右下方 [管理] ,进入页面后就可以输入密码,分别给分,结帖。 
     或参考:
    http://www.csdn.net/help/over.asp
    http://topic.csdn.net/u/20080110/19/7cb462f1-cac6-4c28-848e-0a879f4fd642.html
    =============================================================================
    问题解决,请及时结贴。  
     正确结贴方法:    
     管理帖子-->给分-->输入密码-->结贴[align=center]====  ====
    [/align]
      

  6.   

    还是不行,you have a error in your sql syntax:at line 12
      

  7.   

    select a.SNO
    from 
        (select SNO,count(*) as cnt
        from SC
        group by SNO) as a 
        inner join 
        (
            select cnt 
            from (
                select SNO,count(*) as cnt
                from SC
                group by SNO) as c
            group by cnt
            having count(*)=1) as b
        on a. cnt = b.cnt
    [align=center]====  ====
    [/align]
      

  8.   

    select a.sno from (
    SELECT sno,count(*) as gs from ttry group by sno) a
    inner join 
    (select gs,count(*) as gs1 from (
    SELECT sno,count(*) as gs from ttry group by sno) group by gs having count(*)=1) b
    on a.gs=b.gs1可得到SNO,再连接STUDENT即可
      

  9.   

    其实我觉的这种SQL更重要的是看一下思想,有那种提示错误了,分析一下,那里少了一个别名,就可以了。在跟贴,时间都浪费了。在实际使用中,这种SQL尽量去必免。大的应用中,绝对很慢。所以了解思想,就实践一下,更好。