2013-08-07 3 views
1

오라클에서 CONNECT BY 절을 사용하여 계층 적 데이터를 찾는 동안 문제가 발생했습니다. 예를 들어 보겠습니다. A는 하위 파트 B를 가지고 부모 파트이고 B는 하위 파트 C를가집니다. CONNECT BY 절을 사용하면 세 가지 레벨을 모두 얻을 수 있지만 최상위 레벨 만 원할 것입니다. ,계층 구조의 최상위를 얻기 위해 절을 연결하십시오.

SELECT 
    myTable.ID, 
    myTable.ParentID 
FROM myTable 
WHERE LEVEL = 1 
CONNECT BY PRIOR myTable.ID = myTable.ParentID 

는 모든 수준에서 최상위 (루트) 값을 찾으려면 CONNECT_BY_ROOT 연산자를 사용하여 열 이름 앞에 : 예 A.

답변

6

오라클은 당신이 사용할 수있는 LEVEL pseudocolumn있다

SELECT 
    myTable.ID, 
    myTable.ParentID, 
    CONNECT_BY_ROOT myTable.ID AS "Top Level ID" 
FROM myTable 
CONNECT BY PRIOR myTable.ID = myTable.ParentID 
+0

답장을 보내 주셔서 감사합니다 깁스하지만 3 레벨까지 내 자녀 기록을 가지고 있다면이 쿼리가 작동합니다 .. 하위 레코드의 부모가 레벨 3에 있음을 알 수 있습니까? – user2133005

+0

내 답을 업데이트했습니다. 레벨에 관계없이 계층 구조의 최상위 레벨에서 값을 가져 오는 방법을 보여줍니다. 제발 당신이 필요로하는지보세요. –

+0

당신이 입력 한 많은 깁스 정말 고마워. 부모와 자식이 같을 때 수량을 얻는 동안 새로운 문제에 직면 해있다. 예 : 수량 14과 A를 갖는 B = 수량 5.i 필요 14의 출력하지만 쿼리에 의해 cnnect에서 5 출력을 얻고 있습니다. 당신의 귀중한 입력을 위해 정말 급한 .. 도와주세요. – user2133005

관련 문제