테이블 3개를 조인할때 질문입니다. 0 5 3,922

by 손님 조인 [2008.12.09 10:10:27]


오라클 버젼은 9i입니다.

테이블A

A컬럼 B컬럼 C컬럼 D컬럼
20살 남자 2008 말똥
21살 남자 2009 소똥
22살 여자 2010 개똥

테이블 B

A컬럼 B컬럼 C컬럼 D컬럼
20살 남자 2008 적토마
20살 남자 2008 적노
22살 여자 2010 치아와

테이블 C

A컬럼 B컬럼 C컬럼 D컬럼
20살 남자 2008 흑색
22살 여자 2010 적색
22살 여자 2010 청색


원하는 결과값..

A컬럼 B컬럼 C컬럼 A테이블 D컬럼 B테이블 D컬럼/C테이블 D컬럼  
20살 남자 2008 말똥 적토마  
20살 남자 2008 말똥 적노  
20살 남자 2008 말똥 흑색  
21살 남자 2009 소똥    
22살 여자 2010 개똥 치아와  
22살 여자 2010 개똥 적색  
22살 여자 2010 개똥 청색  


이렇게 출력하고 싶습니다. A,B,C는 각각 PK-FK이고요..

B/C테이블 값을 위 처럼 나열할려면,

두개의 테이블을 UNION하는 방법 말고는 없을까요?

데이터는 (몇십만건중에 몇만건씩 조회를 할텐데요)

by 피터 [2008.12.09 10:43:01]
UNOIN은 해야할 것으로 보입니다.
(A join B) UNION (A join C) 방식이 좋아보입니다.

by 손님 [2008.12.09 10:51:43]
음.. 그럼
A union (B join C)
보다는 그게 좋을까요

by 이재현 [2008.12.09 11:25:23]
쪼렙입니다 : )

제가 틀린거 있음 알려주세요 (--)(__)

저의 생각은......A JOIN ( B UNION ALL C) 입니다.

WITH A AS(
SELECT '20살' AS A, '남' AS B, '2008' AS C, '말똥' AS D FROM DUAL UNION ALL
SELECT '21살' AS A, '남' AS B, '2009' AS C, '소똥' AS D FROM DUAL UNION ALL
SELECT '22살' AS A, '여' AS B, '2010' AS C, '개똥' AS D FROM DUAL
),
B AS(
SELECT '20살' AS A, '남' AS B, '2008' AS C, '적토마' AS D FROM DUAL UNION ALL
SELECT '20살' AS A, '남' AS B, '2008' AS C, '적노' AS D FROM DUAL UNION ALL
SELECT '22살' AS A, '여' AS B, '2010' AS C, '치와와' AS D FROM DUAL
)
, C AS(
SELECT '20살' AS A, '남' AS B, '2008' AS C, '흑색' AS D FROM DUAL UNION ALL
SELECT '22살' AS A, '여' AS B, '2010' AS C, '적색' AS D FROM DUAL UNION ALL
SELECT '22살' AS A, '여' AS B, '2010' AS C, '청색' AS D FROM DUAL
)
SELECT
*
FROM
A,
(
SELECT
A
, B
, C
, D
FROM
(
SELECT
*
FROM B
UNION ALL
SELECT
*
FROM C
)
)B
WHERE A.A = B.A(+)
AND A.B = B.B(+)
AND A.C = B.C(+)


by 마농 [2008.12.09 11:30:58]
a union (b join c) 는 말이 안되는데요.
둘중에 하나
(A join B) UNION (A join C)
A join (B UNION C)

by 손님 [2008.12.09 14:16:54]
재현님, 마농님 감사합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입