SQL选择最早的注册日期和连接表

时间:2018-05-23 11:40:29

标签: sql sql-server database

enter image description here enter image description here我需要从表学生那里获得100名具有最早入学日期的学生,然后将其加入表格等级: 我正在使用这个声明:

 Select *
 from (select top (100) s.*
  from students s
 ) s inner join
 grades g
 on s.PERSON_ID = g.PERSON_ID
 order by ENROLL_DATE ASC

但我得到的结果是错误的。它会跳过很多学生,并显示一些学生的入学日期比跳过的学生更新。我不知道为什么会这样做,这是我为此使用错误的陈述?我使用的系统是MS SQL。希望有人可以帮助我。

2 个答案:

答案 0 :(得分:1)

查询的问题是order by是在两个表之间的连接之后完成的。在进行连接之前,您需要在学生表的临时表中添加顺序。

代码看起来像这样:

Select * from 
 (select top (100) s.*
  from students s
  order by ENROLL_DATE ASC
 ) s inner join
 grades g
 on s.PERSON_ID = g.PERSON_ID

答案 1 :(得分:0)

如果您想要第一个注册的100名学生,您需要在子查询中订购。否则你只需随机挑选100名学生。

然后,如果其中一些学生可能没有成绩,则需要在外部查询中使用LEFT JOIN

SELECT
  *
FROM
(
  SELECT TOP(100) *
    FROM students
ORDER BY enroll_date ASC
)
  s
LEFT JOIN
  grades g
    ON s.PERSON_ID = g.PERSON_ID