我需要从表学生那里获得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。希望有人可以帮助我。
答案 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