Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
我想了解以下SQL查询的执行情况_Sql_Sql Server_Subquery_Correlated Subquery - Fatal编程技术网

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

我想了解以下SQL查询的执行情况,sql,sql-server,subquery,correlated-subquery,Sql,Sql Server,Subquery,Correlated Subquery,输出是 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);

输出是

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
这是您的查询:

select * from student a where a.StudentCode in (select b.StudentCode from student b where a.marks=b.marks);
相关子查询只返回一行。因此,不需要中的
。返回的行是具有相同分数的学生的任意行

如果只有一个学生具有给定的
分数
值,例如
'f'
'g'
,则该学生匹配

对于其余部分,匹配的学生可能是外部查询中的一个引用,也可能不是。因此,子查询将过滤掉它们

如果删除顶部(1)
,则查询将返回所有学生

select s.*
from student s
where s.StudentCode in (select top 1 s2.StudentCode
                        from student s2
                        where s2.marks = s.marks
                       );