2014-11-14 3 views
0

하나의 테이블에 항목 목록이 있습니다. 각 항목에는 2 가지 변형이 있지만이 기본 테이블에는 단일 항목으로 있습니다. 제가하고 싶은 것은 결과의 두 가지 변형 된 데카르트 곱입니다. 또 다른 왼쪽이가 간다 참여가 있기 때문에쿼리에서 생성 된 테이블에서 2 행 조인

ID Variation 
1 a 
1 b 
2 a 
2 b 

이이 쿼리에 수행 할 :

SELECT * FROM items 

내가 원하는 나에게

ID 
1 
2 

을 줄 것이다.

SELECT * FROM items JOIN (SELECT 'a' as Variation) as v 

을하지만 그것은 단지 나에게 내가 필요로하는 4 행의 2를 제공합니다

나는 수행하여 첫 번째 변화를 얻을 수 있습니다.

두 행이있는 변형 된 실제 표가 있으면 작동한다는 것을 알고 있습니다. 두 개의 행을 만들 수 있습니까? 나는 또한이 시도하지만 실패 :

SELECT * FROM items JOIN (SELECT ('a','b') as Variation) as v 

답변

2

항목의 각 행은 쌍 :

SELECT * FROM items CROSS JOIN items AS v 

@Strawberry 다른 옵션도있다 주석으로 a 또는 b 중 하나를 사용하면 다음과 같이 할 수 있습니다.

SELECT * FROM items 
CROSS JOIN (
    SELECT 'a' Variation 
    UNION ALL 
    SELECT 'b' Variation 
    ) Variations 

Sample SQL Fiddle

0

당신은 사용할 수 있습니다 : 당신이 원하는 경우

SELECT * FROM items JOIN items AS v 
+1

'items x JOIN items y'와 (과) 무슨 문제가 있습니까?!?! – Strawberry

+0

죄송합니다. 변종으로 'a'와 'b'를 사용하여 설명했습니다. 나는 두 번째 칼럼에서 같은 테이블에 합류하지 않는다. 각 행 2 개가 필요합니다. 테이블 자체를 조인하면 행 수가 제곱됩니다. 5 항목은 10 대신 25 개의 순열이됩니다. '할 때'(선택 "a") v '는 하나의 행을 메모리에 테이블로 만듭니다. 나는 두 줄이 필요하다. 차라리 실제로 두 번째 테이블을 만들지는 않을 것입니다. – DAB

관련 문제