[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
반응형
'[DB] > [MySQL]_' 카테고리의 다른 글
Partition 이란? (0) | 2024.03.26 |
---|---|
[MySQL]_Mybatis 의 choose, when , otherwise 개념,사용 (0) | 2022.06.09 |
[MySQL]_서브쿼리 개념 (feat. select , from , where) (0) | 2022.05.31 |
MYSQL_UNION , UNION ALL 차이점, 설명 (0) | 2022.05.31 |