connect by에서.. 부모없는 항목이 조회가 됩니다. 0 3 750

by 문선린 [2019.03.04 15:18:30]


select nm
  from tb a           
 where use_yn = 'Y'
 start with lvl_seq = 0
 connect by prior cd = uper_cd

엉뚱한 항목이 하나 조회가 되길래.. 확인해보니..

바로 위 부모항목이 use_yn = 'N'이네요..

이런 경우 해당 부모항목에 연결된 자식항목들의 use_yn에 상관없이

조회가 안되게 하는 방법이 있을까요?

by 마농 [2019.03.04 16:35:06]
SELECT nm
  FROM tb a
-- WHERE use_yn = 'Y'  -- 3. 최종조건
 START WITH lvl_seq = 0
   AND use_yn = 'Y'    -- 1. 시작조건
 CONNECT BY PRIOR cd = uper_cd
   AND use_yn = 'Y'    -- 2. 전개조건
;

조건은 총 3군데 줄 수 있고 다음 순서대로 진행됩니다.
1. 시작조건 : START WITH
2. 전개조건 : CONNECT BY
3. 최종조건 : WHERE
1,2 단계에서 미리 조건을 주는게 맞습니다.
3단계에서만 조건을 주면 1,2단계에서 비효율이 발생됩니다.


by 문선린 [2019.03.04 16:45:02]

답변 감사드립니다.


by 마농 [2019.03.04 16:49:46]

인라인뷰를 이용하는 방법도 있습니다.
 

SELECT nm
  FROM (SELECT *
          FROM tb
         WHERE use_yn = 'Y'
        ) a
 START WITH lvl_seq = 0
 CONNECT BY PRIOR cd = uper_cd
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입