2011-01-03 2 views
1

예상 행을 반환하지 않는 계층 적 쿼리가 있습니다 (직원 배지 = 444).최종 행을 반환하는 계층 적 쿼리

표 : hr_data

badge fname supervisor_badge 
111 Jeff 222 
222 Joe 333 
333 John 444 
444 Tom 444 

SQL :

IC badge fname supervisor_badge 
0 111 Jeff 222 
0 222 Joe 333 
1 333 John 444 

예상 무엇 : 반환 무엇

SELECT CONNECT_BY_ISCYCLE As IC, 
     badge, 
     fname, 
     supervisor_badge 
    FROM hr_data 
START WITH badge = '111' 
CONNECT BY NOCYCLE badge = PRIOR supervisor_badge 

IC badge fname supervisor_badge 
0 111 Jeff 222 
0 222 Joe 333 
**0** 333 John 444 
**1** 444 Tom 444 

이 쿼리를 통해 직원 Tom을 반환하고 중지 할 수 있습니까? 쿼리에서

답변

0

제거 NOCYCLE 절 :

SELECT CONNECT_BY_ISCYCLE As IC, 
     badge, 
     fname, 
     supervisor_badge 
    FROM hr_data 
START WITH badge = '111' 
CONNECT BY badge = PRIOR supervisor_badge 
+0

감사하지만 반환은 java.sql.SQLException : ORA-01436 : 나는이 기능에 익숙하지 않은 해요 사용자 데이터 – jeff

+1

에 반복하여 연결, 하지만 너는 이렇게 할 수 있니? '이전 뱃지와 연결하십시오! = 이전 supervisor_badge AND 배지 = 선행 supervisor_badge'. 또한이 페이지 (http://www.rampant-books.com/10g_79.htm)에 따르면 NOCYCLE 절없이 CONNECT_BY_ISCYCLE을 사용할 수 없지만이 경우에는 CONNECT_BY_ISCYCLE의 사용을 '(badge = supervisor_badge)' –

+0

감사합니다. 그게 효과가있어! 불행히도 정답은 단지 주석입니다. – jeff

0

반대의 접근 방식을 복용하고 트리를 내려 당신에게 원하는 결과를 제공하지만, 아직 작업 접근 방식 없어요.

SELECT CONNECT_BY_ISCYCLE As IC, 
     badge, 
     fname, 
     supervisor_badge 
    FROM (select '111' badge, 'Jeff' fname, '222' supervisor_badge from dual union all 
     select '222' badge, 'Joe' fname, '333' supervisor_badge from dual union all 
     select '333' badge, 'John' fname, '444' supervisor_badge from dual union all 
     select '444' badge, 'Tom' fname, '444' supervisor_badge from dual 
     ) 
START WITH badge = '444' 
CONNECT BY NOCYCLE PRIOR badge = supervisor_badge; 

가 생산 : 여기에 반대

IC BADGE FNAME  SUPERVISOR_BADGE 
--- ----- ---------- ------------------ 
    1 444 Tom  444 
    0 333 John  444 
    0 222 Joe  333 
    0 111 Jeff  222 
+0

제 데이터는 개념적이었고 실제로 데이터베이스에 약 10,000 명의 직원이 있습니다. 왜 FROM 절에서 하위 쿼리를 사용하려고하는지 이해하지 못합니다. 또는 다른 말로 대답에서 전달하려는 것을 이해하지 못합니다. – jeff

+0

@jeff : 하위 쿼리는 모두 유니온과 함께 사용되므로 쿼리를 실행할 샘플 데이터가 있습니다. 당신에게 그것은 단지 당신의 원탁이 될 것입니다. –