2013-09-02 4 views
1

이 유효한 쿼리입니다 :왜 피연산자가 하나의 열만 포함해야합니까?

select 
(select 1), 
(select 2), 
(select 3); 

그러나이되지 않습니다 :

select 
(select 1), 
(select 2, 3); 

DB 로직 '의 관점에서, 왜 두 번째 쿼리는 허용되지 않습니다?

두 번째 쿼리에 대한 수정 사항으로 합법적으로 만들고 첫 번째 쿼리와 동일한 (또는 비슷한) 결과를 반환합니다 (쿼리 결과에 단 하나의 행만 포함됨이 보장된다면)?

는 명확히하기 :

1, 2, 3 실행 시간 (초)을 실제 쿼리에 대한 자리 표시 자입니다. 2와 3은 같은 테이블에서 나온 것입니다. 따로 구분하면 쿼리를 실행하는 데 2 ​​배의 시간이 걸릴 것입니다. 가능하다면이 오버 헤드를 피하고 싶습니다.

+0

@MostyMostacho 123은 매우 복잡한 실제 쿼리에 대한 자리 표시 자입니다, 감사합니다, 나는 쿼리 N 시간을 복제하는 추가 오버 헤드를 피하기 위해 싶습니다 . –

+1

쿼리가 느린 경우 여기에 게시하여 쿼리를 최적화하는 데 도움을 받으십시오. 우리는 그 내용이 무엇인지를 짐작할 수 있습니다. –

+0

@MichaelBerkowski 감사합니다. 나는 일반적인 해결책을 찾고있다. –

답변

0

그것은 실제 사용 사례를 모른 채 열심히 말하고 있지만, 조인 함께 할 일반적으로 수

SELECT t1.f1, t2.f2, t2.f3 FROM 
(SELECT 1 AS f1) AS t1, 
(SELECT 2 AS f2, 3 AS f3) AS t2 

http://sqlize.com/9l0h8pcZKJ

+0

그게 완벽합니다. 't3.f3'에 작은 오타가 있습니다. –

+1

수정 됨. 나는 그 실수를했고 그것이 SQLize에서 작동하지 않는다는 것을 알지 못한다고 믿을 수 없다 ... –

1

문제는 열로 서브 쿼리는 단일 값이어야한다는 것입니다.

대신, 테이블과 하위 쿼리에서 개별 열을 선택

select 
(select 1), 
2, 3 
from (select 2, 3) t; 
관련 문제