한 테이블에서 특정 컬럼값에 따라 조인 테이블이 바뀔때? 0 7 1,885

by 짱짱 [2009.02.16 15:13:30]


 

A라는 테이블과  B , C 테이블이 조인 대상입니다.

A.aa 컬럼값이 'B'면 B테이블과 조인하고,

A.aa 컬럼값이 'C'면 C테이블과 조인해서 결과를 select 할 수 있는 방법이 있을까요?

서브쿼리, decode 이용하려하는데 잘 안돼네요. ^^;

by 짱짱 [2009.02.16 15:35:42]
decode 조건문에 직접 조인query를 넣었는데....

select A.*, decode(A.bb, 'B', (select name from B, A where ... ), 'C', (select name from C, A where ...))
from A

이런식으로....
맞는건가요?
결과를 봐선 맞는거 같기도 한데....

by 음... [2009.02.16 16:11:49]
맞게 돌아갈것 같기는 합니다만..
굳이 스칼라 서브쿼리를 쓰신거라면..
from DUAL에서 해도 되지 않을까요?

by 피터 [2009.02.16 16:15:01]
DECODE안의 쿼리 작성시 A를 다시 JOIN하지 않으시고 메인쿼리의 A와 바로 B 또는 C를 JOIN걸으시면 됩니다.

SELECT DECODE(A,BB,'B',(SELECT 필드 FROM B WHERE B.COL = A.COL), ....
FROM A ;

by 짱짱 [2009.02.16 16:43:58]
두분 감사합니다.......
피터님 조언대로하니 쿼리가 훨씬 간단해지네요.

by 호야 [2009.02.16 16:54:11]
A 테이블의 분량이 많다면.. 다시 생각해 보세요
SELECT ~~
WHERE A.AA = 'B'
UNION ALL
SELECT ~~
FROM ~~
WHERE A.AA = 'C'
A의 양이 많고 조건이 약하다면.. 위의 방법이 나으실겁니다.
하지만 조건으로 나와서 결과가 별로 없다면 스칼라를 추천합니다

by 현 [2009.02.16 17:53:39]
위에 호야님 방식을 추천합니다.
스칼라로 쓰게 되면 리턴되는 결과가 1건일때만 가능합니다.
호야님 처럼 union all로 하더라도 A.aa값에 따라 나머지 한쪽은 거짓이 되기 때문에 타지 않을 것입니다.

by 짱짱 [2009.02.17 09:43:23]
호야님, 현님 감사합니다.
조인에 대한 이론을 다시 한번 공부해야겠네요. ^^;;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입