by 안떠니 [SQL Query] 계층쿼리 CONNECT BY START WITH [2019.03.02 06:08:10]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | WITH mlink(id, grp, nbr, url, dsc ) AS ( SELECT 1, 0, 100, '---------' , 'System' FROM dual UNION ALL SELECT 2, 100, 30, 'Alarm.rpt' , 'Alarm' FROM dual UNION ALL SELECT 3, 100, 35, 'Matrix.rpt' , 'Matrix' FROM dual UNION ALL SELECT 4, 100, 45, 'Roles.rpt' , 'Roles' FROM dual UNION ALL SELECT 5, 0, 30, '---------' , 'Chain' FROM dual UNION ALL SELECT 6, 30, 10, 'Invent.rpt' , 'Invent' FROM dual UNION ALL SELECT 7, 30, 15, 'Detail.rpt' , 'Detail' FROM dual UNION ALL SELECT 8, 30, 20, 'Summary.rpt' , 'Summary' FROM dual ) SELECT * FROM mlink START WITH grp = 0 CONNECT BY PRIOR grp = 0 AND PRIOR nbr = grp ORDER SIBLINGS BY grp, nbr |
이렇게 저렇게 해보다, 우연히(본능적으로??) CONNECT BY 에
PRIOR grp = 0 AND
추가했더니, 제가 원하는 결과가 나왔습니다.
누군가에게 왜 이렇게 작성했는지 설명하라면, ????
설명 좀 해주시면 감사하겠습니다.
보통은 자식은 하나의 부모만 가지는게 일반적인데.
30 의 부모가 0 과 100 두가지여서 그런 듯 하네요.
그냥 계층쿼리를 전개하면 100의 자식인 30 밑으로 또다시 자식이 연결되게 되는데.
이렇게 되는걸 원하지 않는 것 같네요.
부모가 0 인 것만 자식을 연결하겠다는 조건(PRIOR grp = 0) 보다는
어차피 부모는 0인 걸로 시작했으니
레벨 2 까지만 연결하겠다는 조건이 더 깔끔할 것 같네요.(LEVEL <= 2)
2 레벨 까지만 계층 전개 하는게 맞는 건인지?
아니면, 해당 조건이 없는 원래의 결과가 맞는 것일 수도 있구요.
아니면, 데이터 자체에 오류가 있는 것으로 데이터를 수정하는게 맞을 수도 있구요.