아래와 같이 일대다 관계인 상품, 패키지 테이블이 있습니다.
<상품 테이블>
상품ID | 상품명 | 상품가격 |
1 | 상품A | 10000 |
2 | 상품B | 5000 |
3 | 패키지상품A | 13000 |
<패키지 테이블>
상품ID | 상품참조ID | 개수 | 할인가 |
3 | 1 | 1 | 1000 |
3 | 2 | 1 | 1000 |
상품-패키지 테이블을 left join을 할경우 아래와 같은 결과물이 나옵니다.
select * from 상품 a left join 패키지 b using(상품ID);
<상품-패키지 left join 결과>
상품ID | 상품명 | 가격 | 상품참조ID | 패키지개수 | 할인가 |
1 | 상품A | 10000 | null | null | null |
2 | 상품B | 5000 | null | null | null |
3 | 패키지상품A | 13000 | 1 | 1 | 1000 |
3 | 패키지상품A | 13000 | 2 | 1 | 1000 |
결과물에서 상품참조ID 부분이 아래와 같이 상품 테이블의 정보로 변환이 됐으면 합니다.
<원하는 결과물>
상품ID | 상품명 | 가격 | 참조상품명 | 참조상품가격 | 패키지개수 | 할인가 |
1 | 상품A | 10000 | null | null | null | null |
2 | 상품B | 5000 | null | null | null | null |
3 | 패키지상품A | 13000 | 상품A | 10000 | 1 | 1000 |
3 | 패키지상품A | 13000 | 상품B | 5000 | 1 | 1000 |
한번의 쿼리로 위와 같은 결과물을 뽑아내고 싶은데..
상품-패키지 left join된 결과에서 다시한번 상품테이블을 조인을 해야 될거 같긴한데
잘되지를 않네요 흠..
조언부탁드립니다.
감사합니다.
WITH 상품 AS ( SELECT 1 상품ID, '상품A' 상품명, 10000 상품가격 UNION ALL SELECT 2, '상품B', 5000 UNION ALL SELECT 3, '패키지상품A', 13000 ) , 패키지 AS ( SELECT 3 상품ID, 1 상품참조ID, 1 개수, 1000 할인가 UNION ALL SELECT 3, 2, 1, 1000 ) SELECT a.상품ID , a.상품명 , a.상품가격 , b.상품참조ID , c.상품명 참조상품명 , c.상품가격 참조상품가격 , b.개수 패키지개수 , b.할인가 FROM 상품 a LEFT OUTER JOIN 패키지 b ON a.상품ID = b.상품ID LEFT OUTER JOIN 상품 c ON b.상품참조ID = c.상품ID ORDER BY a.상품ID, b.상품참조ID ;