본문 바로가기

공부이야기/Oracle

[SQL]계층형 최하위 레벨 찾기

CONNECT_BY_ISLEAF 라는게 있었네. ㅎㅎ

 

기본적으로 CONNECT BY 절을 사용해서 계층형을 뿌리고

 

SELECT 절에 CONNECT_BY_ISLEAF 를 추가하면 최하위일때는 '0' 아닐떄는 1로 표기가됨.

 

ex)

 

SELECT level,
             CONNECT_BY_ISLEAF LEAF
FROM   WM_WBS_INFO
WHERE  WBS_VERSION = 6
START WITH WBS_PARENT_ID IS NULL
AND WBS_VERSION = 6
CONNECT BY  PRIOR WBS_ID =  WBS_PARENT_ID
AND WBS_VERSION = 6

 

tip.1

1. START WITH는 처음 시작할 조건을 의미.

2. CONNECT BY는 1.의 데이터와 연결된 로우를 반복하여 찾음.
   쉽게 생각해 Prior쪽의 컬럼이 하위이면 밑으로, 상위코드이면 위로 찾는 구조.

 

tip.2

나도 이번에 하다보니까 안건데. 뭔가 버전같이 관리가 되는 항목이 있다면 START WITH절, CONNECT BY 절에도 버전에 관련된 조건이 추가되어야함. 안그럼 중복발생!!!