WITH recursive_query(S_MENU_ID,S_U_MENU_ID,S_MENU_NM,sort,dept_S_MENU_NM) AS (
SELECT
S_MENU_ID
, S_U_MENU_ID
, S_MENU_NM
, convert(varchar(255), S_MENU_ID) sort
, convert(varchar(255),S_MENU_NM) dept_S_MENU_NM
FROM TBL_MENU_INFO
WHERE S_U_MENU_ID IS NULL
UNION ALL
SELECT
b.S_MENU_ID
, b.S_U_MENU_ID
, b.S_MENU_NM
, convert(varchar(255), c.sort + ' > ' + b.S_MENU_ID) sort
, convert(varchar(255),c.dept_S_MENU_NM + ' > ' + b.S_MENU_NM) dept_S_MENU_NM
FROM TBL_MENU_INFO b, recursive_query c
WHERE b.S_U_MENU_ID = c.S_MENU_ID
)
SELECT S_MENU_NM, dept_S_MENU_NM FROM recursive_query order by sort;
이런식으로 재귀쿼리 작성이 가능하다.
근데 저 빨간 부분 ( FROM TBL_MENU_INFO b, recursive_query c) 이 참 신기하네..
그냥 상식적으로 생각하면 절대 짤 수 없는 쿼리인듯 ㅠㅠ
아직 만들어지지도 않은 recursive_query에서 값을 가져오다니.. 그래서 재귀이겠지만 뭐 아무튼 신기할 따름..
저거 할때 convert를 꼭 해줘야 한다. 안그러면앵커 부분과 재귀 부분 간의 유형이 일치하지 않습니다. 라는 에러가 뜬다.
아래 설명이 잘 되어있다.
https://technet.microsoft.com/ko-kr/library/ms190766(v=sql.105).aspx
https://technet.microsoft.com/ko-kr/library/ms186243(v=sql.105).aspx
'SQL' 카테고리의 다른 글
Oracle dynamic date 오라클 동적 시간 만들기 (0) | 2017.06.28 |
---|---|
IINNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN (0) | 2017.02.15 |
ORACLE WITH (0) | 2017.01.25 |
MySql에서 날짜 테이블 비슷한거 만들기 (0) | 2016.12.16 |
MySql Character set (0) | 2016.12.16 |