위와 같은 조선 왕 계보도가 있는데요.
아래 처럼 "조선"이라는 테이블을 구성했다고 치면
건색 조건을 "숙종"으로 주었을 때 숙종 아래부분의 가계도가 쫙 펼쳐져서 밑의 그림 처럼 족보 순서대로 나오게 쿼리를 짜려면
Sql 어떤 기능을 사용 해야 할지.. 조언 좀 부탁 드립니다. ㅠㅜ
Comment 3
-
코붕이
2014.10.06 14:31
-
맨즈밤
2014.10.07 15:27
답변이 달리지않아 미흡하나마 달아봅니다.
WITH를 통한 재귀는 스택방식으로 처리되기 때문에 가장 최근에 읽은 데이터를 기준으로 조회가 됩니다. 즉 예로 보여주신 표에서
레벨3인 정조,은원군,은산군을 읽은 다음엔 은산군을 밑으로 데이터를 읽어내려갑니다. 사람이 원하는 순서는 아니지요.
소트컬럼을 추가하셔야하구요. 재귀로직을 푸는방법엔 WITH 말고도 몇가지 더있는데, 역시나 사람이 보기엔 가독성이 좋은 순서는
아니기에 소트컬럼이 다 추가되었던걸로 기억합니다.
-
코붕이
2014.10.09 08:46
결국 임시 Sort 컬럼 만들어서 정렬시키는 방법으로 처리했습니다. ㅠㅜ
늦었지만 답변 감사합니다.
이전 불타는불쥐님의 답변을 참고해서 어찌어찌 원하는 값 조회는 해놨는데 정렬이 문제네요 ㅡ.ㅡ;
Sort 컬럼 추가하지 않고
세번째 그림처럼 자식이 있으면 자식을 다 select한 뒤, 그 다음 순차대로 정렬이 가능한가요? ㅜㅠ
WITH 조선_CTE (자,부,레벨) AS
(
SELECT 자,부,0 FROM 조선 WHERE 부='숙종'
UNION ALL
SELECT AA.자,AA.부,BB.레벨+1 FROM 조선 AS AA INNER JOIN 조선_CTE AS BB ON AA.부= BB.자
)
SELECT 자,부,레벨 FROM 조선_CTE GROUP BY 자,부,레벨