티스토리 뷰


계층구조(Tree) SQL 작성을 위해 팁을 찾아보았다. 


        SELECT PGM_NO, CHD_PGM_NO

        FROM (

        SELECT 

            LEVEL LVL

        , A.CHD_PGM_NO

        , CONNECT_BY_ISLEAF LEAF_FLG

        , CONNECT_BY_ROOT CHD_PGM_NO "PGM_NO"

        FROM  COM_MNU_CFG A, COM_PROGRAM B

        WHERE A.PRNT_PGM_NO = B.PGM_NO

        START WITH A.CHD_PGM_NO IN (SELECT PGM_NO FROM COM_BOOKMARK WHERE USR_ID = 'userId') 

        CONNECT BY A.CHD_PGM_NO = PRIOR A.PRNT_PGM_NO

        ) 

        WHERE LEAF_FLG = 1 ;


START WITH, CONNECT BY 용법은 다른 포스팅을 찾아보라. 

핵심은, "CONNECT_BY_ISLEAF" 와 "CONNECT_BY_ROOT 컬럼명"이다. 

해당 오라클함수를 사용하여 LEAF 여부와, ROOT컬럼을 알 수 있다. 

위 예제처럼 LEAF에서 시작했을 경우 또한 마찬가지. 이때는 LEAF가 ROOT, ROOT가 역으로 LEAF. 


참고: http://www.gurubee.net/lecture/2223

http://www.gurubee.net/lecture/2250