by 십이장기 [SQL Query] [2020.09.23 16:50:23]
현재 테이블A에
A테이블 데이터
id par_id name type
11 13 TT의자식1 String
12 13 TT의자식2 String
13 null TT Array
14 16 SS의 자식1 String
15 16 SS의 자식2 String
16 null SS Object
17 null GG String
이런식으로 데이터가 있을때
결과값으로
이름 Type
TT Array
TT[].TT의자식1 String
TT[].TT의자식2 String
SS Object
SS.SS의자식1 String
SS.SS의자식2 String
GG String
이런식으로 상위 ID값이 있는걸 기준으로 각각 부모에 맞는 자식을 다 표현하고 다음 부모와 자식 관계 순서로 order by 하여
보여주고싶습니다.
결과로의 이름같은경우에는 값이 상위 ID의 Type이 Array일때 상위ID값의 이름에 [] 와 .(점)을 붙여서
즉, 상위ID값의 이름 + [](괄호) + .(점) 을 더한후에 자식 이름의 값을 각각의 행으로 표현하고 싶습니다
반대로 상위ID값의 Type이 Object일땐 [[을 뺀 .(점)만 붙이고 싶습니다
제 부족한 오라클 실력으론 잘 안되네요 ㅠㅠ 혹시 방법이 있을까요?
WITH t AS ( SELECT 11 id, 13 par_id, 'TT의자식1' name, 'String' type FROM dual UNION ALL SELECT 12, 13, 'TT의자식2' , 'String' FROM dual UNION ALL SELECT 13, null, 'TT' , 'Array' FROM dual UNION ALL SELECT 14, 16, 'SS의 자식1', 'String' FROM dual UNION ALL SELECT 15, 16, 'SS의 자식2', 'String' FROM dual UNION ALL SELECT 16, null, 'SS' , 'Object' FROM dual UNION ALL SELECT 17, null, 'GG' , 'String' FROM dual ) SELECT id, par_id, name, type , LEVEL lv , SYS_CONNECT_BY_PATH(name || DECODE(type, 'Array', '[]'), '.') x FROM t START WITH par_id IS NULL CONNECT BY PRIOR id = par_id ORDER SIBLINGS BY id ;
3. 계층구조 쿼리(Hierarchical Queries)의 이해
3.1. 계층구조 쿼리(Hierarchical Queries)란?
3.2. 계층구조 쿼리의 활용