티스토리 뷰

Oracle/Oracle-SQL

Connect By Prior

니플하임_ 2007.03.07 15:44

connect by prior를 이용한 요청중,
대분류 > 중분류 > 소분류

이와 같은 모양을 만들어달라는 요청이 있었다,
문제는 레벨별로 나눠지는 글들에 대한 구분필드가 필요하다는 것이었는데..
원래 엔터티구조 설계시에 그러한 분류컬럼을 미리 예상하여 만들고 관리하기는
귀찮고 힘든것이 사실이다. 그리하여 아래와 같이 각 대/중/소분류 군끼리
묶을수 있는 컬럼을 생성해주는 쿼리를 만들어보았다.

select /*+ ordered use_nl(b, a) */
        a.*, b.svccode,
        row_number() over (partition by 1 order by 1) - level as h_val
  from table1 b, table2 a
    where b.svccode(+) = a.svccode
  connect by prior a.parsvccode = a.svccode
  start with a.svccode = :value1

이와같은 쿼리는 각각의 h_val별로 추려내어 정리하면
대분류 > 중분류 > 소분류군의 구분필드를 간단히 추출해낼수 있다.

너무 쉽지만, 못보고 지나치기 쉬운 것들이 이뿐이겠는가. ^0^
댓글
댓글쓰기 폼