Sql 语法不正确的子查询仍然返回结果
前几天在解决查询问题时偶然遇到这个问题,我有一个基本的SELECT语句,其中有一个WHERE IN语句。 现在,子查询自己正在尝试从不存在字段的表中选择字段。如果您单独运行子查询,您会得到预期的“不正确语法”,如果您运行整个查询,它将执行并返回结果。谁能解释一下这是怎么执行的,因为对我来说这毫无意义 所以有两个基本的表格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
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区分大小写的服务器?这是设计的;在任何地方都使用适当的表和列别名,这样就不会发生这种情况。见,,,等等。