계층형 쿼리에서의 조인 0 6 5,740

by ljw [SQL Query] start with connect by 계층형 쿼리 조인 [2012.01.17 15:59:18]


안녕하세요

계층형 쿼리에서 조인을 하고자 하는데 생각 하는데로 

결과가 안나옵니다.

검색을 해본결과 제가 생각한게 틀린거 같진 않은데

제가 원하는대로 잘 안되네요 ^^;;;

with org as(
select 'A' as org, '99' as upper_org from   dual union all
select 'b' as org, 'A' as upper_org from   dual union all
select 'c' as org, 'A' as upper_org from   dual union all
select 'DD' as org, '99' as upper_org from   dual union all
select 'D' as org, 'DD' as upper_org from   dual union all
select 'f' as org, 'D' as upper_org from   dual union all
select 'e' as org, 'D' as upper_org from   dual 
),
data as 
(
 select 'b' as org, 10 as amt from dual union all
 select 'c' as org, 20 as amt from dual union all
 select 'f' as org, 40 as amt from dual union all
 select 'e' as org, 50 as amt from dual
)
--조인 잘됨
select *
from org a, data b
where a.org = b.org;

--계층형 쿼리 잘 됨
select a.*, level
from org a
start with a.upper_org='99'
connect by prior a.org = a.upper_org;


--계층형 + 조인 잘안됨
select *
from org a, data b
where a.org = b.org
start with a.upper_org='99'
connect by prior a.org = a.upper_org;


제가 하고싶은 부분은 3번째 쿼리 즉 계층형 쿼리에서 조인을 해서 작업을 진행하고 싶은데

조인이 안되고 데이터가 안나오네요 ㅠ_ㅠ

1,2번 쿼리는잘됩니다.

9i부터 계층형 쿼리에서 조인이 가능한 것으로 알고 있었는데요.


몇몇 글에 그런 답변도 있는거 같고요
http://www.gurubee.net/article/45588

혹시 제가 뭘 잘못했을까요 ㅠ_ㅠ

고수님들이 충고해주시면 감사하겠습니다.

by 행인 [2012.01.17 16:26:01]
조인해서 나오는 데이터에 99는 없는거 같은데요..

by 행인 [2012.01.17 16:28:03]
조인한 데이터에 대해 equi 조인이 안되는 org데이터에 대해 처리를 outer join 하시거나 해서 처리를 해주셔야 될거 같습니다만

by ljw [2012.01.17 16:33:37]
감사합니다.
마음이 급하니 산으로 가는구요. ...

by 행인 [2012.01.17 16:35:32]
쿼리를
with org as(
select 'A' as org, '99' as upper_org from dual union all
select 'b' as org, 'A' as upper_org from dual union all
select 'c' as org, 'A' as upper_org from dual union all
select 'DD' as org, '99' as upper_org from dual union all
select 'D' as org, 'DD' as upper_org from dual union all
select 'f' as org, 'D' as upper_org from dual union all
select 'e' as org, 'D' as upper_org from dual
),
data as
(
select 'b' as org, 10 as amt from dual union all
select 'c' as org, 20 as amt from dual union all
select 'f' as org, 40 as amt from dual union all
select 'e' as org, 50 as amt from dual union all
select 'A' as org, 60 as amt from dual union all
select 'DD' as org, 70 as amt from dual union all
select '99' as org, 100 as amt from dual
)
select lpad(' ', 4*level)||a.org org, a.upper_org, b.amt
from org a, data b
where a.org = b.org(+)
start with a.upper_org='99'
connect by prior a.org = a.upper_org;


위처럼 하면 나오네요 .

by 행인 [2012.01.17 16:37:58]
아 위처럼 하면 컬럼이 alias되서 쭈욱 밀리니 col org format a30 이라고 먼저
컬럼 사이즈 정해주시고 하시면 잘 나올거에요

by ljw [2012.01.18 10:26:49]
//행인 덕분에 원하는 바를 이뤘습니다
정말 감사드립니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입