Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.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_Sql Server 2008 - Fatal编程技术网

Sql 语法不正确的子查询仍然返回结果

Sql 语法不正确的子查询仍然返回结果,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,前几天在解决查询问题时偶然遇到这个问题,我有一个基本的SELECT语句,其中有一个WHERE IN语句。 现在,子查询自己正在尝试从不存在字段的表中选择字段。如果您单独运行子查询,您会得到预期的“不正确语法”,如果您运行整个查询,它将执行并返回结果。谁能解释一下这是怎么执行的,因为对我来说这毫无意义 所以有两个基本的表格 CREATE TABLE Table1 ( FieldA int , FieldB int ) CREATE TABLE Table2 ( FIeld

前几天在解决查询问题时偶然遇到这个问题,我有一个基本的SELECT语句,其中有一个WHERE IN语句。 现在,子查询自己正在尝试从不存在字段的表中选择字段。如果您单独运行子查询,您会得到预期的“不正确语法”,如果您运行整个查询,它将执行并返回结果。谁能解释一下这是怎么执行的,因为对我来说这毫无意义

所以有两个基本的表格

CREATE TABLE Table1
(
    FieldA int
    , FieldB int
)

CREATE TABLE Table2
(
    FIeldC int
    , fieldD int
)

INSERT INTO Table1
VALUES (1,1)
,(1,2)
,(1,3)

INSERT INTO Table2
VALUES (2,1)
,(2,2)
,(2,3)
现在这个查询将失败:这说明在表2中没有FieldA是有道理的

SELECT FIeldA FROM Table2
消息207,16级,状态1,第1行 列名“FIeldA”无效

然而,不知何故,这个查询不会失败、执行并返回结果

SELECT * FROM TAble1
WHERE FieldA IN (SELECT FIeldA FROM Table2)
它返回了表1中的所有记录

换成这个

SELECT * FROM TAble1
WHERE FieldB IN (SELECT FIeldA FROM Table2)
仅返回表1中的第一个结果

在Microsoft SQL Server 2008 R2 RTM以及Microsoft SQL Server 2012 SP1上尝试了此操作-

挑选* 来自表1 t1 其中t1.FieldA在选择t2.FieldA
从表2中t2

区分大小写的服务器?这是设计的;在任何地方都使用适当的表和列别名,这样就不会发生这种情况。见,,,等等。