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 40887 게시물 읽기
No. 40887
계층구조 데이터 구해오기[내용수정]
작성자
초보
작성일
2015-07-31 16:21ⓒ
2015-08-03 10:21ⓜ
조회수
8,250

안녕하세요. 아래와 같이 두개의 테이블이 있다고 한다면

product_code_mapping 기준으로 계층구조의 데이터 양식을 구해 오고 싶습니다.

product_master 테이블 기준으로 본다면 connect by 로 구해올수 있겠지만

product_code_mapping 기준으로 구하고 싶은데 방법이 있을까요?

 

WITH product_master AS

(SELECT 11 AS master_id

,'first_master' AS master_name

,NULL AS high_master_id

,1 AS product_level

FROM dual

UNION ALL

SELECT 22 ,'sub1_first_master',11,2

FROM dual

UNION ALL

SELECT 33,'sub2_first_master',11,2

FROM dual

UNION ALL

SELECT 55,'sub1_second_master',44 ,2

FROM dual

UNION ALL

SELECT 66,'ub2_second_master',44,2

FROM dual

UNION ALL

SELECT 44,'second_master',NULL,1

FROM dual)

SELECT *

FROM product_master a

connect by PRIOR a.master_id = a.high_master_id

START WITH product_level = 1

;

 

 

WITH product_code_mapping AS

(SELECT 'AA' AS product_id

,22 AS master_id

,11 AS high_master_id

,3 AS order_no

FROM dual

UNION ALL

SELECT 'AA',33,11,2

FROM dual

UNION ALL

SELECT 'AA',66,44,1

FROM dual )

SELECT *

FROM product_code_mapping a

where a.product_id = 'AA';

 

product_code_mapping 의 master_id 컬럼의 data는 product_master 2레벨의 Data 입니다.

product_code_mapping 테이블 기준의 order_no 컬럼 기준으로 1레벨도 같이 보여주고 싶습니다.

 

원하는 결과는 아래와 같습니다.

 

master_name master_id

 

second_master     44

sub2_second_master     66 <-- product_code_mapping 의 Data

first_master     11

sub2_first_master     22 <-- product_code_mapping 의 Data

sub1_first_master     33 <-- product_code_mapping 의 Data

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

WITH product_master(master_id, master_name, high_master_id, product_level) AS
(
          SELECT 11, 'first_master'      , null, 1 FROM dual
UNION ALL SELECT 22, 'sub1_first_master' ,   11, 2 FROM dual
UNION ALL SELECT 33, 'sub2_first_master' ,   11, 2 FROM dual
UNION ALL SELECT 44, 'second_master'     , null, 1 FROM dual
UNION ALL SELECT 55, 'sub1_second_master',   44, 2 FROM dual
UNION ALL SELECT 66, 'sub2_second_master',   44, 2 FROM dual
)
, product_code_mapping(product_id, master_id, high_master_id, odr) AS
(
          SELECT 'AA', 22, 11, 3 FROM dual
UNION ALL SELECT 'AA', 33, 11, 2 FROM dual
UNION ALL SELECT 'AA', 66, 44, 1 FROM dual
)
SELECT *
  FROM (SELECT master_id, master_name, high_master_id
             , MIN(CONNECT_BY_ROOT(odr)) odr
          FROM (SELECT a.master_id, a.master_name, a.high_master_id
                     , b.odr
                  FROM product_master a
                     , product_code_mapping b
                 WHERE b.product_id(+) = 'AA'
                   AND b.master_id(+) = a.master_id
                )
         START WITH odr IS NOT NULL
         CONNECT BY master_id = PRIOR high_master_id
         GROUP BY master_id, master_name, high_master_id
        )
 START WITH high_master_id IS NULL
 CONNECT BY PRIOR master_id = high_master_id
 ORDER SIBLINGS BY odr
;

마농(manon94)님이 2015-08-03 10:17에 작성한 댓글입니다.

마농님 감사합니다

초보님이 2015-08-05 09:16에 작성한 댓글입니다.
이 댓글은 2015-08-05 09:17에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
40891pro c 컴파일 후 에러메시지 입니다. 고견 부탁해요!
김영감
2015-08-06
8696
40890SQL 문의 입니다. ^^ [4]
이현정
2015-08-06
8497
40888pl/sql htp.p기능을 통해 사원조회 수정 삭제기능을 만드려고하는데
천범석
2015-08-03
7530
40887계층구조 데이터 구해오기[내용수정] [2]
초보
2015-07-31
8250
40886잘 이해가 안되는 SQL 결과에 대하여 질문을 드립니다. [3]
김흥수
2015-07-31
8116
40885SQL 좀 봐주세요. [2]
이현정
2015-07-30
8603
40884PL/SQL에서 TABLE명을 변수로 받아서 CURSOR 실행법..? [3]
초보자
2015-07-30
8306
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다