본문 바로가기

SQL

ms-sql 재귀쿼리

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