前几天偶然遇到这个问题,同时解决查询问题,我有一个基本的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
Msg 207,Level 16,State 1,Line 1 列名称无效' FIeldA'。
但不知何故,这个查询不会失败,执行并返回结果
SELECT * FROM TAble1
WHERE FieldA IN (SELECT FIeldA FROM Table2)
它返回了Table1
中的所有记录将其更改为
SELECT * FROM TAble1
WHERE FieldB IN (SELECT FIeldA FROM Table2)
仅返回Table1的第一个结果
在Microsoft SQL Server 2008 R2(RTM)以及Microsoft SQL Server 2012(SP1)上尝试过此操作
答案 0 :(得分:0)
试试这个 -
SELECT * 来自TAble1 t1 在哪里t1.FieldA IN(SELECT t2.FIeldA 来自表2 t2)