2011-08-26 2 views
2

SQL Server 2008 R2에서 동일한 스키마를 사용하는 두 개의 테이블이 있습니다. 괄호를 그대로 사용하여 다음 쿼리를 실행하면 두 테이블 모두에서 결과를 얻을 수 있습니다. 테이블 이름에 대한 SQL UNION 쿼리를 대체 할 수 없습니다.

/* 
select distinct Name, Rank, SerNo, OtherStuff from 
*/ 

(
select Name, Rank, SerNo, OtherStuff from OldPlayers 

union 
select Name, Rank, SerNo, OtherStuff from NewPlayers 
) 

/* 
OldPlayers 
*/ 

go 

그때 모두 주석의 주석을 해제하고, 괄호 안의 표현을 주석 경우

, 나 또한 (물론 하나 개의 테이블에서) 결과를 얻을 수 있습니다.

끝에 테이블 이름을 다시 주석으로 추가하고 테이블 이름을 바꿀 수 있도록 괄호 식을 주석 처리하지 않으면 "잘못된 구문 근처에 '오류가 발생합니다."

왜 테이블 이름에 공용 표현식을 사용할 수 없습니까?

select Name, Rank, SerNo, OtherStuff from 
(
select Name, Rank, SerNo, OtherStuff from OldPlayers 
union 
select Name, Rank, SerNo, OtherStuff from NewPlayers 
) as Players 

답변

4

는이처럼하려고하면 query - 구문을 사용하면 결과 테이블의 이름을 지정해야합니다 (테이블 이름이 테이블 자체를 참조하도록 쿼리의 가장 바깥 부분이 아닌 경우). 따라서 조합 쿼리 대신 "선택 1"을 사용하면 (결과적으로 "테이블"이라는 이름을 지정해야합니다.)

그래서

,

select distinct Name, Rank, SerNo, OtherStuff from 
(
select Name, Rank, SerNo, OtherStuff from OldPlayers 
union 
select Name, Rank, SerNo, OtherStuff from NewPlayers 
) SYNTAXREQUIRESTABLENAME 

작동합니다.

+3

'union '으로'distinct '를 사용하지 않아도됩니다. –

+0

Worked! 감사! – Buggieboy

1

내가 편리한 SQL 서버의 사본이없는,하지만 당신은의 일환으로 테이블에 대한 식을 사용할 때이 항상 그런 것은 아니다 :