[WITH RECURSIVE]_재귀 쿼리 사용법

2022. 6. 29. 10:48[DB]/[MySQL]_

728x90
반응형

 사용 이유

 

WITH RECURSIVE 문을 사용해서 메모리 상에 가상의 테이블을 저장 할수 있다.

테이블을 생성, 데이터 삽입 등을 하지 않아도 가상 테이블을 생성하여 이용할 수 있다.

 

예제

WITH RECURSIVE TGT_HOUR  AS (
    SELECT CONVERT( CONCAT(#{nowDate}, '090000')  , DATETIME)  as STD_DT
        , #{nowDate} as STD
        , '09' as `hour`
        , '00' as `minute`
        , 1 as ORDER_SEQ
    UNION ALL
    SELECT DATE_ADD(STD_DT, INTERVAL 10 MINUTE)
        , DATE_FORMAT(DATE_ADD(STD_DT, INTERVAL 10 MINUTE), '%Y%m%d')
        , DATE_FORMAT(DATE_ADD(STD_DT, INTERVAL 10 MINUTE), '%H')
        , DATE_FORMAT(DATE_ADD(STD_DT, INTERVAL 10 MINUTE), '%i')
        ,  ORDER_SEQ + 1
    FROM TGT_HOUR
    WHERE ORDER_SEQ   <![CDATA[ < ]]>  54
)

가상의 태이블인 TGT_HOUR 을 만듭니다.

입력받은 nowDate 에 090000을 붙이고 해당 데이터 타입을 DATETIME으로 변경합니다.

 

그리고 UNION ALL 을 통해 합치게 됩니다.

시작일 + 9시 부터 10분간의 interval 을 가진 DATE_FORMAT 들을 선택하게 되고 ORDER_SEQ를 하나 늘리게 됩니다.

해당 반복은 54 가 될때 까지 반복하게 됩니다.

 

TGT_HOUR 이라는 가상 테이블에는 입력받은 날 의 9시부터 10분간격으로 저녁 6시 전까지의 모든 타임을 가져옵니다.

 즉 9 10 11 12 13 14 15 16 17 18시 사이의 10분간격이 총 6번 -> 간격이 9번 54번 순회

 

이처럼 개발자가 원하는 형식의 데이터로 이루어진 가상의 테이블을 생성할 수 있습니다.

728x90
반응형