2016-06-02 5 views
1

열이 [From], [To] 인 테이블이 있습니다. 나는 하나의 목록으로 이러한 열을 선택해야하고 나는이 방법을 수행SQL 단일 행의 목록으로 2 열 선택

SELECT [From] FROM [TableX] WHERE (...) 
UNION 
SELECT [To] FROM [TableX] WHERE (...) 

문제는 꽤 길어 나는이 WHERE (...) 조건을 복제하지 않을 것입니다. 이 중복을 피할 수있는 방법이 있습니까?

+0

:

select * from ( SELECT [From] FROM [TableX] UNION SELECT [To] FROM [TableX] ) WHERE (...) 
Alex

+1

WHERE 절을 표시하면 문제를 더 쉽게 이해할 수 있습니다. – jarlh

답변

3

WHERE 상태를 복제 방지하기 위해 CTE를 사용?
+0

이 문제가 실제로 해결되는지 확신 할 수 없습니다. – Alex

+0

나는이 문제가 동일한 WHERE 조건을 두 번 포함해야한다는 사실을 이해했다. 위 쿼리에서 단 한 번 밖에 없습니다. –

+0

이 예제로 피들을 제공 할 수 있습니까? 몇 가지 간단한 '어디서'. 나는 전에이 기법을 사용한 적이 없다. – Alex

1

파생 테이블에서 UNION을 수행하고 하나의 공통된 WHERE 절이 있습니다. 이 같은 테이블과`WHERE` 절대적으로 동일 왜`UNION`해야하는 경우

;WITH [CTE_Criteria] AS (
    SELECT [From], [To] 
    FROM [TableX] 
    WHERE (...) 
) 
SELECT [From] FROM [CTE_Criteria] 
UNION 
SELECT [To] FROM [CTE_Criteria]; 
+0

이것은 결코 작동하지 않을 것이다 ;-) 서브 쿼리는 단지 하나의 컬럼을 포함하지만, 테이블과 WHERE 절에 모두있는 것은 아니다 : – Alex

+0

WHERE 절에 의존한다 ... 필요하다면 2 레벨 파생 테이블을 수행 할 수있다 . – jarlh

+0

아니요 * 의존하지 않습니다. 이 쿼리가 원본 쿼리와 동일한 결과를 가져 오는 경우 합당한 예제를 제공해주십시오. '어디 1 = 1'? – Alex