Programmers SQL ๊ณ ๋์ Kit ์์ WITH RECURSIVE๋ฅผ ์ฌ์ฉํ์ฌ
์์์ ํ ์ด๋ธ์ ์์ฑํ๊ณ Joinํ์ฌ ํ์ดํด์ผํ๋ ๋ฌธ์ ๋ฅผ ๋ง๋ฌ์ต๋๋ค
์ฒ์ ๋ง์ฃผํ๋ ๋ฌธ๋ฒ์ด์๊ณ , ์ ๋ฆฌํ๊ธฐ ์ํด ๊ธ ์์ฑํ๊ฒ ๋์์ต๋๋ค.
WITH RECURSIVE
์ด๋ฆ์์ ์ ์ ์๋ฏ์ด recursive(์ฌ๊ท์ ์ธ) ํ๋ก๊ทธ๋๋ฐ ๋ฌธ๋ฒ์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก UNION ๊ฐ๋ ์ ์ดํดํ๊ณ ์์ด์ผ ํฉ๋๋ค.
1. UNION ALL์ ๊ธฐ์ค์ผ๋ก ์๋จ SELECT๋ 1ํ๋ง ์คํ๋ฉ๋๋ค. ์ด ๋ <cloum>๋ช ์ ๊ฐ์ง๋ <table>์ด ์์ฑ๋ฉ๋๋ค.
2. ์ดํ ํ๋จ SELECT๋ฌธ์ ์ฐ์ ์คํํฉ๋๋ค.
์์ ์์ฑํ <table>๋ก ๋ถํฐ <column>์ ๋ง์ง๋ง ๋ ์ฝ๋๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์ต๋๋ค.
( +1 ๋ฑ ์ฐ์์ ์ธ ๊ฐ์ ์ ๋ ฅํ ์ ์๊ฒ ์ฃ ?)
3. ๋ค์์ ๋ฐ๋ณต์ ์ธ์ ๊น์ง ์ํํ ๊ฒ์ธ์ง WHERE๋ฌธ์ผ๋ก ๋ฐ๋์ ์ง์ ํด์ฃผ์ด์ผ ํฉ๋๋ค
WITH RECURSIVE <table> AS(
SELECT <data> as <column>
UNION ALL
SELECT <column> FORM <table>
WHERE <์กฐ๊ฑด๋ฌธ>
)
์์ ์ฝ๋
WITH RECURSIVE temp as(
SELECT 0 as h
UNION ALL
SELECT h+1 FROM temp
WHERE 23 < 0
)
SELECT * FROM temp
๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ ํด๋น ๋ฌธ๋ฒ์ ๋ํ ๊ฐ์ด ์ค์๋์?! ๋ฌธ์ ๋ฅผ ํ์ด๋ณด๋ฉด์ ํ์คํด ๋ด ๊ฒ์ผ๋ก ๋ง๋ค์ด ๋ด ์๋ค!
<์ ์ ์๊ฐ ๊ตฌํ๊ธฐ(2)>
https://school.programmers.co.kr/learn/courses/30/lessons/59413
REFERENCE
https://inpa.tistory.com/entry/MYSQL-%F0%9F%93%9A-RECURSIVE-%EC%9E%AC%EA%B7%80-%EC%BF%BC%EB%A6%AC