database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 40991 게시물 읽기
No. 40991
계층형 구조에서 질문 있습니다.
작성자
박양희(sadadboy)
작성일
2015-11-05 14:02
조회수
8,491

총 3depth의 계층형 구조를 가진 테이블이 있는데요..

 

ID MENUNAME 부모ID

001 초등학교 *

002 1학년 001

003 1반 002

004 2반 002

005 3반 002

006 2학년 001

007 1반 006

008 2반 006

009 3반 006

101 중학교 *

102 1학년 101

103 1반 102

104 2반 102

105 3반 102

 

 

결과

===========

초등학교 - 1학년 - 1반

초등학교 - 1학년 - 2반

초등학교 - 1학년 - 3반

초등학교 - 2학년 - 1반

초등학교 - 2학년 - 3반

초등학교 - 2학년 - 3반

중학교 - 1학년 - 1반

중학교 - 1학년 - 2반

중학교 - 1학년 - 3반

 

여기에 조건을

start with '부모ID'='001'

로하면

 

1학년 - 1반

1학년 - 2반

1학년 - 3반

2학년 - 1반

2학년 - 3반

2학년 - 3반

 

 

이렇게 나오는데요..

 

학년, 반으로 조건을 주어도

 

학교 - 학년 - 반 이렇게 전체 뎁스가 나오는 방법은 없나요???

초등학교 - 1학년 - 1반

초등학교 - 1학년 - 2반

초등학교 - 1학년 - 3반

초등학교 - 2학년 - 1반

초등학교 - 2학년 - 3반

초등학교 - 2학년 - 3반

위 조건에서는 이런식으로 말이죠...

 

답변 부탁드립니다. ㅠ

 

 

 

 

이 글에 대한 댓글이 총 3건 있습니다.

처음 쓰셧던 결과가 나오는 쿼리를 묶어서

 

connect by 절에 조건을 주는게 아니라

 

where 절에 조건을 주면 되자않을까요?

 

with T AS(

select '001' ID, '초등학교' menuName, '' parentId from dual union all

select '002' ID, '1학년' menuName, '001' parentId from dual union all

select '003' ID, '1반' menuName, '002' parentId from dual union all

select '004' ID, '2반' menuName, '002' parentId from dual union all

select '005' ID, '3반' menuName, '002' parentId from dual union all

select '006' ID, '2학년' menuName, '001' parentId from dual union all

select '007' ID, '1반' menuName, '006' parentId from dual union all

select '008' ID, '2반' menuName, '006' parentId from dual union all

select '009' ID, '3반' menuName, '006' parentId from dual union all

select '101' ID, '중학교' menuName, '' parentId from dual union all

select '102' ID, '1학년' menuName, '101' parentId from dual union all

select '103' ID, '1반' menuName, '102' parentId from dual union all

select '104' ID, '2반' menuName, '102' parentId from dual union all

select '105' ID, '3반' menuName, '102' parentId from dual

)

select CON.AA||'-'||CON.BB||'-'||CON.CC

from(

select A.menuName AA, B.menuName BB , C.menuName CC

from T A

LEFT OUTER JOIN T B

ON B.parentId = A.ID

LEFT OUTER JOIN T C

ON C.parentId = B.ID

where A.ID in ('001','101')

) CON

where 1=1

and CON.BB = '1학년'

and CON.CC = '1반'

 

이게 원하는 내용일진 모르겠습니다만;;

 

요약하면

select

*

from

(

기존 결과쿼리

)

where 해당 컬럼 like '%'||'1학년'||'%'

and 해당 컬럼 like '%'||'1반'||'%'

 

초보개발자님이 2015-11-06 13:13에 작성한 댓글입니다. Edit

WITH t AS
(
SELECT '001' id, '초등학교' menuname, '*' 부모id FROM dual
UNION ALL SELECT '002', '1학년' , '001' FROM dual
UNION ALL SELECT '003', '1반'   , '002' FROM dual
UNION ALL SELECT '004', '2반'   , '002' FROM dual
UNION ALL SELECT '005', '3반'   , '002' FROM dual
UNION ALL SELECT '006', '2학년' , '001' FROM dual
UNION ALL SELECT '007', '1반'   , '006' FROM dual
UNION ALL SELECT '008', '2반'   , '006' FROM dual
UNION ALL SELECT '009', '3반'   , '006' FROM dual
UNION ALL SELECT '101', '중학교', '*'   FROM dual
UNION ALL SELECT '102', '1학년' , '101' FROM dual
UNION ALL SELECT '103', '1반'   , '102' FROM dual
UNION ALL SELECT '104', '2반'   , '102' FROM dual
UNION ALL SELECT '105', '3반'   , '102' FROM dual
)
-- 3. 상,하위 검색 자료 합쳐서 계층 쿼리 완성
SELECT SUBSTR(SYS_CONNECT_BY_PATH(menuname, '-'), 2) x
  FROM (-- 1. 상위 자료 검색
        SELECT DISTINCT *
          FROM t
         WHERE LEVEL != 1
         START WITH 부모id = '001'
         CONNECT BY id = PRIOR 부모id
         UNION ALL
        -- 2. 하위자료 검색
        SELECT *
          FROM t
         START WITH 부모id = '001'
         CONNECT BY PRIOR id = 부모id
        )
 WHERE CONNECT_BY_ISLEAF = 1
 START WITH 부모id = '*'
 CONNECT BY PRIOR id = 부모id
;

마농(manon94)님이 2015-11-06 16:51에 작성한 댓글입니다.

 정말 감사합니다!! 덕분에 해결되었습니다 ㅠ

박양희(sadadboy)님이 2015-11-06 17:37에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40995SQL질문입니다 [3]
장현섭
2015-11-06
8200
40993아리송한 SQL 급하게 질문합니다. [4]
개뚱이
2015-11-06
8067
40992쿼리 질문 있습니다 (left join) [5]
검콤이
2015-11-05
8386
40991계층형 구조에서 질문 있습니다. [3]
박양희
2015-11-05
8491
40990IN 구문 에러 [1]
끙끙~
2015-11-05
7769
40987데이터중 소숫점이 있는데이터만 추출..부탁드립니다. [3]
개발자
2015-11-03
8242
40986오라클 805버젼인데 복구할수있는방법은 없는지요??? [1]
조승식
2015-11-02
7981
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다