本帖最后由 chehongzhi 于 2009-07-27 16:49:51 编辑

解决方案 »

  1.   

    SELECT DISTINCT 学生表1.* 
    FROM 学生表 学生表1 where 学生表1.学号 IN 
    (...)
    这个结构理解是什么意思吗?
    SELECT TOP 2 学生表.学号 
    FROM 学生表 
    WHERE 学生表.功课编号 = 学生表1.功课编号 
    ORDER BY 学生成绩 DESC
    这个是查询功课编号相同的前两条记录的学号 
      

  2.   


    这已经是最简单的嵌套查询了,我真不知道该如何解释...如果与exists\group having\cte之类的语句估计你还要晕
      

  3.   

    SELECT DISTINCT 学生表1.* -----查询从子查询出来的前2位的学生的信息,
    FROM 学生表 学生表1 where 学生表1.学号 IN   ---按照学生成绩来排序
    (SELECT TOP 2 学生表.学号                
    FROM 学生表 
    WHERE 学生表.功课编号 = 学生表1.功课编号 ----查询编号相同的前2位的学生的学号
    ORDER BY 学生成绩 DESC) 
      

  4.   

    SELECT TOP 2 学生表.学号
    FROM 学生表
    WHERE 学生表.功课编号 = 学生表1.功课编号
    ORDER BY 学生成绩 DESC
    这个查询不是返回两条记录吗?为什么最终查询结果会有6条?
      

  5.   

    可是不管功课编号是多少,Top 2 始终选择的是前两条记录啊,即使有100门功课Select Top 2也只会查询出两个记录
      

  6.   

    select distinct s.* from student,student as s where s.stid in (select top 2 stid from student  order by student.chengji DESC)这时还是两条记录呢
    但是加上Where变成这样select distinct s.* from student,student as s where s.stid in (select top 2 stid from student where student.cid=s.cid order by student.chengji DESC)就有六条记录了,也就是说Where 不但没筛选反而使记录增加了,这是怎么回事呢?
      

  7.   

    SELECT DISTINCT 学生表1.*
    FROM 学生表 学生表1 where 学生表1.学号 IN
    (SELECT TOP 2 学生表.学号
    FROM 学生表
    WHERE 学生表.功课编号 = 学生表1.功课编号
    ORDER BY 学生成绩 DESC) 
    这个查询中,子查询
    SELECT TOP 2 学生表.学号
    FROM 学生表
    WHERE 学生表.功课编号 = 学生表1.功课编号
    ORDER BY 学生成绩 DESC
    到底查询出几个记录?是不是两个?明明是Top2嘛
      

  8.   

    还有就是
    WHERE 学生表.功课编号 = 学生表1.功课编号 
    到底限定了什么样的选择条件呢?