본문으로 바로가기

ORACLE- select level

category 데이터베이스 2019. 6. 22. 01:36

흔히 메뉴의 하위메뉴를 구성할 때 

악세서리(Super Category) - 목걸이,팔찌,벨트,반지(Sub category)
상의(Super Category)- NONE(Sub category)
 하의(Super Category) - NONE(Sub category)
 신발(Super Category) - NONE(Sub category)

 

최상위 메뉴를 level 1 하위 메뉴를 level2 .....level n으로 구성합니다.

 

그러기 위해서는 우선 테이블을 구성할 때 필드 중에 자기 참조 필드가 있어야합니다.

 

예를 들어 최상위 메뉴의 코드 값이 100이면 하위 메뉴의 부모(상위 메뉴) 코드 값은 100이 되어야합니다.

 

즉 하나의 테이블 내에서 하위 메뉴 코드 값을 외래키로 하여 상위 메뉴 코드를 참조합니다.

 

이렇게 내부적으로 참조가 일어납니다.

 

여기서 각각 level을 부여하고 싶다면 필드에는 없지만 인위적으로 level값을 select하여 

VO에 넣어줄 수 있습니다.

 

select와 level, start with, conect by prior로 구성하여 select문을 작성하면 됩니다.

 

말로 하면 어려우니 예시를 봅시다.

 

select level,cateName,cateCode,cateCodeRef 
from jeongchan_category
start with cateCodeRef is null
connect by prior cateCode = cateCodeRef;

위 SQL문을 자세히 보시기 바랍니다.

 

우선 select로 테이블 필드와 level 필드를 뽑습니다.

start with를 통해 하위 카테고리가 참조하는 부모 카테고리의 코드 값이 null인 것

즉 상위 카테고리가 되겠죠?? 

왜냐하면 참조코드 값이 없다는 것은 자기자신 즉 상위 카테고리를 뜻합니다.

 

즉 상위 카테고리를 기준(level=1)으로 connect by prior를 통해 cateCode = cateCodeRef 인 것을

즉 상위 카테고리(level=1)의 하위카테고리들을 level=2로 부여하겠다는 뜻입니다.

 

결과는 아래와 같습니다.

 

악세서리 상위 카테고리에 level 1 부여

그 밑 하위 카테고리 4개에 level 2 부여

나머지 상의 하의 신발은 상위 카테고리로 level 1 부여

 

이러한 level 값들을 통해서 select 태그로 값을 판단할 수 있습니다.

'데이터베이스' 카테고리의 다른 글

ORA-00972: identifier is too long  (0) 2019.06.28
Oracle 순위 뽑기  (0) 2019.06.20