我想了解以下 SQL 查询的执行


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),则查询将返回所有学生。

相关内容

  • 没有找到相关文章

最新更新