现在要查询出
 所选课程至少要包含学号为28的学生所选课程的学生,该sql语句怎么写? 比如:
 学号28的学生选修了课程a和课程b,
 学号29的学生选修了课程a、课程b和课程c,
 学号30的学生只选修了课程a,
 学号31的学生选修了课程a和课程表
 那符合条件的学生就是学号为29和31的学生。
你这2个是2个需求吧    尤其是后面的学号29 31 是根据什么来找出来的  我看29是选修了ABC,31选择了A 同样28也选择课程有A  

解决方案 »

  1.   


    28选了ab
    可是31只选了a,必须至少要选者课程a和课程b
      

  2.   

    比如:
    SC(学号,课程号,成绩)表有以下数据:
    25,a, 80
    25, b, 60
    25, c, 70
    25, d, 90
    26, a, 90
    27, b, 70
    28, a, 70
    28, b, 80
    29, a, 90
    29, b, 80
    29, c, 80
    针对以上测试数据,满足查询结果的学生是学号为25和29的学生。
      

  3.   

    SELECT 学号 FROM SC 
      WHERE 课程号 IN (SELECT 课程号 FROM SC WHERE 学号=28 )
      AND 学号<>28
      

  4.   


    --学生表
    SELECT * FROM STUDENT;STUNO STUNM 
    25    25name
    26    26name
    27    27name
    28    28name
    29    29name--課程表
    SELECT * FROM CLASS;CLASSID CLASSNM
    a       aname  
    b       bname  
    c       cname  --選課表
    SELECT * FROM SC;STUNO CALSSID SCORE
    25    a          80
    25    b          60
    25    c          70
    25    d          90
    26    a          90
    27    b          70
    28    b          80
    28    a          70
    29    a          90
    29    b          80
    29    c          80--查詢SQLSELECT T1.STUNO FROM 
    (SELECT STUNO,Max(CALSSID)CALSSID FROM (SELECT STUNO,WM_CONCAT(CALSSID)over(PARTITION BY STUNO ORDER  BY CALSSID) CALSSID FROM SC WHERE STUNO<>'28') GROUP BY STUNO) T1,
    (SELECT STUNO,Max(CALSSID)CALSSID FROM (SELECT STUNO,WM_CONCAT(CALSSID)over(PARTITION BY STUNO ORDER  BY CALSSID) CALSSID FROM SC WHERE STUNO= '28') GROUP BY STUNO) T2                            
    WHERE InStr(T1.CALSSID,T2.CALSSID)>0 GROUP BY T1.STUNO;--查询结果STUNO
    25   
    29   
      

  5.   

    SELECT  学号,课程号,COUNT(*) FROM SC  a ,(
    SELECT  课程号 FROM SC WHERE 学号=28) b 
    WHERE a.课程号=b.课程号 
    GROUP BY 学号,课程号
    HAVING COUNT(*)> =(SELECT COUNT(*) FROM SC WHERE 学号=28 )
      

  6.   


    select a.学号, s.姓名
      from student s, sc a, (select c.课程号 from sc c where c.学号 = '28') t
     where s.学号 = a.学号
       and a.课程号 = t.课程号
       and a.学号 <> '28'
     group by a.学号,s.姓名
    having count(1) >= (select count(1) from sc where sc.学号 = '28')
      

  7.   

    select distinct a.姓名
    from(
    select 学号,课程号 from SC )c 
    inner join
    (select 课程号 from Class  where 课程名称 in('A','B')) b
    on c.课程号=b.课程号
    inner join 
    (select 学号,姓名 from Student)a on
    a.学号=c.学号
    可以试试
      

  8.   

    SELECT 学号 FROM SC 
      WHERE 课程号 IN (SELECT 课程号 FROM SC WHERE 学号=28)
      AND 学号<>28
      GROUP BY 学号
     HAVING COUNT(*)=(SELECT COUNT(*) FROM SC WHERE 学号=28)
      

  9.   

    select 学号
      from SC e,
           (select 学号
              from SC c,
                   (select 课程号
                      from Class a, (select 课程号 from SC where 学号 = 28) b
                     where a.课程号 = b.课程号) d
             where c.课程号 exit in d.课程号) f
     where e.学号 != f.学号
     group by 学号
    having count(*) = (SELECT COUNT(*) FROM SC WHERE 学号 = 28);
      

  10.   

    select a.学号, s.姓名
       from student s, sc a, (select c.课程号 from sc c where c.学号 = '28') t
      where s.学号 = a.学号
        and a.课程号 = t.课程号
        and a.学号 <> '28'
      group by a.学号,s.姓名
     having count(1) >= (select count(1) from sc where sc.学号 = '28')
      

  11.   

    select s.学号,st.名字 from student st join sc s on s.学号=st.学号where s.课程号 in(select s.课程号from sc s where s.学号='28') and s.sno<>'28'