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 39227 게시물 읽기
No. 39227
Connect By 쿼리 관련질문이요~
작성자
커넥트
작성일
2012-01-12 20:32ⓒ
2012-01-12 20:32ⓜ
조회수
6,600

TABLE A

ID             |   BF_ID

0010000   |

0020000   |  0010000

0030000   |  0020000

0040000   |  0030000

위와 같이 테이블과 데이터가 있습니다.

저 테이블 내용을 아래와 같이 조회 하고 싶은데 쿼리가 잘 안짜지네요, 

쿼리고수님들의 답변 부탁드려요^^

의도는 최 하위 자식 로우의 값이 ID로 계속 나오고, 부모 값들이 BF_ID로 모두 출력되길 원합니다. 

ID             |  BF_ID

 0040000  | 0030000

 0040000  | 0020000

 0040000  | 0010000

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

계층구조가 일렬로 계단식 구조라면 가능합니다만
트리식으로 분기하는 자식이 여럿일 수 있는 구조라면
요구사항 자체가 논리적으로 모순입니다.


테이블에 계층구조 그룹이 하나만 있지는 않을듯 합니다만...
특정 그룹만을 조건으로 주고 조회하나요?
아니면 전체 조회를 하나요?

마농(manon94)님이 2012-01-13 08:34에 작성한 댓글입니다.

관심가져 주셔서 감사합니다~

저 테이블은 하나의 부모는 하나의 자식만을 가지고 있습니다~

제 질문 의도는 하나의 부모는 하나의 자식을 가지지만

그 자식 역시 또 자식을 가질수 있기 때문에

최상의 부모를 기준으로 최하위 자식까지 연결된 자식값을 모두 조회 하고 싶은겁니다~

커넥트님이 2012-01-13 09:40에 작성한 댓글입니다. Edit

특정 루트를 조건으로 조회하나요?

아니면 전체 자료를 조회하나요?

마농(manon94)님이 2012-01-13 10:26에 작성한 댓글입니다.

루트는 보기 나름인데요

최하위 자식부터 시작한다면 은 BF_ID가 NULL 인것이 루트구요

최상위 부모부터 시작한다면 최상의 부모를 지정해 줄 것입니다.

0040000 부터 자식들을 가져온다거나, 003000부터 자식들을 가져온다거나 할 것입니다.

커넥트님이 2012-01-13 13:03에 작성한 댓글입니다. Edit

WITH T AS
(
SELECT '0010000' ID, NULL BF_ID FROM DUAL UNION ALL
SELECT '0020000' ID, '0010000' BF_ID FROM DUAL UNION ALL
SELECT '0030000' ID, '0020000' BF_ID FROM DUAL UNION ALL
SELECT '0040000' ID, '0030000' BF_ID FROM DUAL
)
SELECT  MAX(ID) KEEP (DENSE_RANK LAST ORDER BY CONNECT_BY_ISLEAF) OVER () ID,
        BF_ID,
        CONNECT_BY_ISLEAF ISLEAF  -- 말단여부를 확인하는 함수
FROM T
START WITH BF_ID IS NULL
CONNECT BY PRIOR ID = BF_ID

꼼방대님이 2012-01-13 13:13에 작성한 댓글입니다. Edit

특정 ID 조건으로 조회한다는 거죠?

SELECT id
     , bf_id
     , MIN(DECODE(leaf, 1, id)) OVER() leaf_id
  FROM (
        SELECT id
             , bf_id
             , CONNECT_BY_ISLEAF leaf
          FROM t
         --특정 ID 시작 조건--
         --START WITH bf_id IS NULL
         --START WITH bf_id = '0020000'
         START WITH id = '0020000'
         CONNECT BY PRIOR id = bf_id
        )
;

마농(manon94)님이 2012-01-13 13:24에 작성한 댓글입니다.

두분 답변 감사드립니다 ^^

두분 쿼리를 가지고 활용해서 하면 좋을듯하네요~

많은 도움되었습니다~

 

커넥트님이 2012-01-13 17:53에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
39230가변 세로를 가로로 변환하는 쿼리에 대한 문의를 드립니다. [2]
김병철
2012-01-16
5512
39229쿼리로 ROWSPAN 효과내기 [1]
초보
2012-01-16
9115
39228검색기간 내 일요일 기준 주간 시작, 끝 날짜 [2]
김기운
2012-01-13
4884
39227Connect By 쿼리 관련질문이요~ [7]
커넥트
2012-01-12
6600
39225쿼리는 질문있어요 ㅜㅜ [3]
정진히
2012-01-11
4119
39224두 날짜사이의 월 구하는 쿼리 GROUP BY 질문입니다. [2]
박주영
2012-01-11
4952
39223다시 한번 더 부탁드립니다. (초 응급 상황) [2]
순이
2012-01-11
3879
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다