오라클 쿼리 질문드립니다. 0 3 1,203

by 오라클네티 [SQL Query] [2017.08.23 13:00:12]


COLUMN :  SEQ   |  RE_SEQ

                 1         NULL            

                 2            1

                 3            2

                 4         NULL

                 5         NULL

                 6            5

                 7         NULL

                 8            7

                 9            7

                10            9

 

위와 같이 댓글의 레코드를 담고있는 테이블이 있습니다.

SEQ column 은 시퀀스로 되어있고 re_seq 는 댓글의 seq를 저장하고있습니다.

 

3번 SEQ 를 조회했을때에 1번 SEQ 즉 부모 레코드를 조회할수있는 쿼리를 짜고 싶은데 잘 모르겠어서 도움요청드립니다.

6번 SEQ 를 조회했을땐 부모 5 SEQ가 나와야합니다.

by 아발란체 [2017.08.23 13:15:56]

오라클 9i 이상 경우 계층형 쿼리 함수 "CONNECT_BY_ROOT"를 이용하시면 됩니다.

http://www.gurubee.net/lecture/1903

WITH T(seq, re_seq) AS (
    SELECT 1, NULL FROM DUAL
    UNION ALL SELECT 2, 1 FROM DUAL
    UNION ALL SELECT 3, 2 FROM DUAL
    UNION ALL SELECT 4, NULL FROM DUAL
    UNION ALL SELECT 5, NULL FROM DUAL
    UNION ALL SELECT 6, 5 FROM DUAL
    UNION ALL SELECT 7, NULL FROM DUAL
    UNION ALL SELECT 8, 7 FROM DUAL
    UNION ALL SELECT 9, 7 FROM DUAL
    UNION ALL SELECT 10, 9 FROM DUAL
)
SELECT
    seq, re_seq, LEVEL, CONNECT_BY_ROOT seq AS root_seq
FROM
    T
START WITH 
    re_seq IS NULL
CONNECT BY 
    PRIOR seq = re_seq

 


by 마농 [2017.08.23 13:17:03]
WITH bbs AS
(
SELECT 1 seq, NULL re_seq FROM dual
UNION ALL SELECT  2,    1 FROM dual
UNION ALL SELECT  3,    2 FROM dual
UNION ALL SELECT  4, NULL FROM dual
UNION ALL SELECT  5, NULL FROM dual
UNION ALL SELECT  6,    5 FROM dual
UNION ALL SELECT  7, NULL FROM dual
UNION ALL SELECT  8,    7 FROM dual
UNION ALL SELECT  9,    7 FROM dual
UNION ALL SELECT 10,    9 FROM dual
)
SELECT seq
  FROM bbs
 WHERE CONNECT_BY_ISLEAF = 1
 START WITH seq = :v_seq
 CONNECT BY seq = PRIOR re_seq
;

 


by 오라클네티 [2017.08.23 13:45:07]

감사합니다 많은 도움이 되었습니다.

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입