create table student(StudentCode varchar, Marks int);
insert into student values ('a',100);
insert into student values ('b',100);
insert into student values ('c',100);
insert into student values ('d',90);
insert into student values ('e',90);
insert into student values ('f',80);
insert into student values ('g',70);
SELECT *
FROM student a
WHERE a.StudentCode IN (
SELECT TOP 1 b.StudentCode
FROM student b
WHERE a.marks = b.marks
);
输出为
StudentCode Marks
1 a 100
2 d 90
3 f 80
4 g 70
为什么每条记录在使用子查询连接后不重复
对于每个 Mark 值,向我显示一个拥有该标记的学生,即使有更多学生拥有该标记 取下顶部,所有操作都将重复:
select * from student a where a.StudentCode in (select b.StudentCode from student b where a.marks=b.marks);
这是您的查询:
select s.*
from student s
where s.StudentCode in (select top 1 s2.StudentCode
from student s2
where s2.marks = s.marks
);
相关子查询只返回一行。 因此,不需要in
。 返回的行是具有相同分数的学生的任意行。
如果只有一个学生具有给定的marks
值 - 例如'f'
和'g'
,则该学生匹配。
对于其余部分,匹配的学生可能是也可能不是外部查询中的一个引用。 因此,子查询将过滤掉它们。
如果删除top (1)
,则查询将返回所有学生。