트리구조 조회방법 문의 0 5 1,970

by 리미루 [2012.11.29 17:43:42]



cate_cd

cate_name

cate_level

cate2_cd

cate3_cd

cate_order

100

컴퓨터

1

0

0

1

102

노트북

2

100

0

1

103

넷북

2

100

0

2

104

삼성

3

100

102

1

101

핸드폰

1

0

0

2

105

아이폰

2

101

0

1


결과값
컴퓨터
   > 노트북
   >> 삼성
   >> 엘지
   > 넷북
   >데스크탑
핸드폰
  > 아이폰
  >>아이폰4
  >>아이폰3
  >삼성
 >>갤럭시2
 >>갤럭시3


한개의 테이블에 위와 같이 대,중,소 분류의 코드값이 들어가 있습니다.
2개의 컬럼으로 계층형으로 구성할 경우 START WITH CONNECT BY PRIOR 로 처리가 가능했는데
이런 경우는 어떻게 조회를 해야 할지 방법이 떠오르지 않습니다. ㅠ.ㅠ

테이블 구조를 변경해야 할까요?
by 사랑초 [2012.11.29 18:32:20]
SQL 문으로 어찌어찌하면 될 수 있을 것 같긴한데,
올려주신 결과값으로 하면 정규화에 위배되는건 아닌지;
아래와 같은 데이터 형식이 되어야 하지 않을까요?
컴퓨터 | 핸드폰
노트북 | 아이폰
삼성   |
넷북   |

by 제로 [2012.11.29 18:33:33]
with t as
( select '컴퓨터' cate_name, 1 cate_level from dual union all
 select '노트북', 2 from dual union all
 select '넷북',  2 from dual union all
 select '삼성',  3 from dual union all
 select '핸드폰', 1 from dual union all
 select '아이폰', 2 from dual
)
select cate_name
   , cate_level
   , lpad(' ', (cate_level-1)*10, ' ')||cate_name
from t m
; 

by 사랑초 [2012.11.29 18:48:25]
아하! lpad 로 해결할수도 있겠군요... 근데 테이블 구조자체가 잘못된건 아닌거라고 판단해도 되나요? 음 이해가 잘 안되나서;;; 현업에서도 저런경우가 종종 있는지 궁금합니다!

by 리미루 [2012.11.29 18:57:54]

아..질문을 잘 못 드렸네요..시간내서 답변해 주셨는데...
어쨋든 감사합니다~

by 마농 [2012.11.29 19:26:44]
SELECT *
  FROM t
 START WITH cate_level = 1
 CONNECT BY PRIOR cate_cd = DECODE(cate_level, 3, cate3_cd, cate2_cd)
 ORDER SIBLINGS BY cate_order
;
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입