조회쿼리 실행시 계층형 쿼리를 통하여 하위부서가 없을시 CONNECT_BY_ISLEAF을 사용하여
구분하는 쿼리를 작성했습니다.
예를 들면
SELECT LEVEL "level", CONNECT_BY_ISLEAF AS "O_LEAF", T.* FROM TABLE T
WHERE COLUM1 IS NULL
START WITH ~
CONNECT BY PRIOR ~
ORDER SIBLINGS BY ~
쿼리와
SELECT LEVEL "level", CONNECT_BY_ISLEAF AS "O_LEAF", T.* FROM TABLE T
WHERE
START WITH ~
CONNECT BY PRIOR ~
AND COLUM1 IS NULL
ORDER SIBLINGS BY ~
쿼리가 있습니다
조건값을 계층형 쿼리 위에 두느냐 아래에 두느냐의 차이입니다.
그런데 데이터 CONNECT_BY_ISLEAF 값을 틀렸습니다.
이유가 무엇인가요? 데이터가 맞는것은 2번째 쿼리였습니다.
위에서 아래로 실행된다는 논리라면
첫번째 쿼리처럼 COLUM1을 제외하고 계층형쿼리를 실행하는게 더 올바른 방식이 아닌가요?
그런데 결과값은 밑의 쿼리가 맞아서 혼동이 오네요..
조건절이 3개가 있는데요. 실행 순서는 다음과 같습니다.
1. WHERE 절의 조인 조건 : 계층 전개 시작 전에 적용됨
2. START WITH : 계층 시작 조건
3. CONNECT BY : 계층 전개 조건
4. WHERE 절의 필터 조건 : 계층 전개 끝난 뒤에 적용됨
해당 조건이
- 시작 레벨에 적용되어야 한다면? Start With
- 전개할때 적용되어야 한다면? Connect By
- 전개 후에 최종 적용되어야 한다면? Where
전개 전에 모두 적용되어야 한다면? 다음 두가지 방법이 있습니다.
- Start With 와 Connect By 에 모두 주기
- 인라인뷰 안에서 미리 조건 주기