2014-10-20 4 views
0

쿼리를 문제가있는 동안 우연히 발견했습니다. WHERE IN() 문을 포함하는 기본 SELECT 문이 있습니다. 이제 자체 하위 쿼리가 필드가 존재하지 않는 테이블에서 필드를 선택하려고합니다. 하위 쿼리를 자체적으로 실행하면 예상치 못한 '잘못된 구문 근처'가 표시되고 전체 쿼리를 실행하면 결과가 반환됩니다. 아무에게도 전혀 이해가되지 않기 때문에 아무에게도 이것이 어떻게 실행되는지 설명 할 수 있습니까?구문이 잘못된 하위 쿼리는 여전히 결과를 반환합니다.

그래서 두 가지 기본 테이블

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 FieldB IN (SELECT FIeldA FROM Table2) 

로 변경 표

에서 모든 레코드를 반환 첫 번째 결과를 반환

SELECT * FROM TAble1 
WHERE FieldA IN (SELECT FIeldA FROM Table2) 

반환 결과 표 1에서

시도해보십시오. Microsoft SQL Server 2008 R2 (RTM)뿐만 아니라 마이크로 소프트는 SQL 서버 2012 (SP1)

+0

대소 문자를 구분하는 서버입니까? –

+1

이것은 의도적으로 설계된 동작입니다. 알맞은 테이블과 컬럼 별칭을 사방에 사용하십시오. [Connect # 302281] (http://connect.microsoft.com/SQLServer/feedback/details/302281), [Connect # 735178] (http://connect.microsoft.com/SQLServer/feedback/details/735178/)), [Connect # 772612] (http://connect.microsoft.com/SQLServer/feedback/details/772612/), [Connect # 265772] (http://connect.microsoft.com/SQLServer/feedback/details/ 265772 /), [KB # 298674] (http://support.microsoft.com/kb/298674), [상관 하위 쿼리 (MSDN)] (http://msdn2.microsoft.com/en-us/library/ms187638) .aspx) 등 –

답변

0

이 시도 -

SELECT * 표 1의 T1로부터 WHERE t1.FieldA IN (표 2 (T2)로부터 t2.FIeldA 를 선택)

관련 문제