๋ฌธ์
https://school.programmers.co.kr/learn/courses/30/lessons/301650
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
3์ธ๋์ ๋์ฅ๊ท ์ ID(ID) ๋ฅผ ์ถ๋ ฅํ๋ SQL ๋ฌธ์ ์์ฑํด์ฃผ์ธ์. ์ด๋ ๊ฒฐ๊ณผ๋ ๋์ฅ๊ท ์ ID ์ ๋ํด ์ค๋ฆ์ฐจ์ ์ ๋ ฌํด์ฃผ์ธ์.
๋ฌธ์ ํ์ด์ ์์..
์๊ธฐ ์ฐธ์กฐ ๊ด๊ณ
: ๋ค๋ฅธ ํ ์ด๋ธ์ด ์๋ ์๊ธฐ ์์ ๊ณผ์ ๊ด๊ณ๋ฅผ ๋งบ๋ ํ์ ์ผ๋ก ์ํ ๊ด๊ณ๋ผ๊ณ ๋ ํ๋ค.
์ ๋ฌธ์ ์ ํ ์ด๋ธ ๊ตฌ์กฐ๋ฅผ ์ดํด๋ณด์.
์ ํ ์ด๋ธ์ parent_id์ id๋ฅผ ์กฐ๊ฑด์ผ๋ก ํ์ฌ ์๊ธฐ์ฐธ์กฐ๋ฅผ ํ๋ ๊ตฌ๋ฌธ์ ์๋์ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
select child.id as child_id , parent.id as parent_id
from ecoli_data child join (select id from ecoli_data) parent
on child.parent_id = parent.id
์คํ ๊ฒฐ๊ณผ๋ ์๋์ ๊ฐ๋ค.
์ด์ฒ๋ผ ์๊ธฐ ์์ ๊ณผ์ ๊ด๊ณ๋ฅผ ๋งบ๋ ๊ฒ์ "์๊ธฐ ์ฐธ์กฐ ๊ด๊ณ" ๋ผ ํ๋ฉฐ, ์ฃผ๋ก ๊ณ์ธต ๊ด๊ณ๋ฅผ ํํํ ๋ ์ฌ์ฉํ๋ค.
(ex. ์ง์ - ๊ด๋ฆฌ์, ๋ถ๋ชจ - ์์)
๋ฌธ์ ํ์ด 1 - ์๊ธฐ ์ฐธ์กฐ
์์ ์๊ธฐ ์ฐธ๊ณ ๊ด๊ณ๋ฅผ ์ด์ฉํ์ฌ 2์ค JOIN๋ฌธ์ ํตํด 3์ธ๋์ ID๋ฅผ ๊ตฌํ๋ค.
1. 2์ธ๋ ๊ตฌํ๊ธฐ
SELECT child.id AS gen2, parent.id AS gen1
FROM ecoli_data child
JOIN (SELECT * FROM ecoli_data) parent
ON child.parent_id = parent.id
WHERE parent.parent_id IS NULL
๋ถ๋ชจ๊ฐ NULL์ธ ๋ถ๋ชจ(=1์ธ๋)๋ฅผ ๊ฐ์ง ์๋ ๋ฅผ ๊ตฌํ๋ค.
2. 3์ธ๋ ๊ตฌํ๊ธฐ
SELECT child.id AS ID
FROM ecoli_data child
JOIN (
SELECT child.id AS gen2, parent.id AS gen1
FROM ecoli_data child
JOIN (SELECT * FROM ecoli_data) parent
ON child.parent_id = parent.id
WHERE parent.parent_id IS NULL
) past
ON child.parent_id = past.gen2
ORDER BY child.id;
1์์ ๊ตฌํ 2์ธ๋๋ฅผ ๋ถ๋ชจ๋ก ํ๋ ์๋ ๋ฅผ ๊ตฌํ๋ค.
๋ฌธ์ ํ์ด 2 - ์๋ธ ์ฟผ๋ฆฌ
๊ฐ์ ๋ก์ง์ ์๋ธ ์ฟผ๋ฆฌ๋ก ๊ตฌํํ์๋ค.
์๊ธฐ ์ฐธ์กฐ ๋์ WHERE - IN ์กฐ๊ฑด ์ ์ ์ฌ์ฉํ์๋ค.
1. 2์ธ๋ ๊ตฌํ๊ธฐ
# 2์ธ๋
SELECT ID
FROM ECOLI_DATA
WHERE PARENT_ID IN (
# 1์ธ๋
SELECT ID
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
)
๋ถ๋ชจ๊ฐ 1์ธ๋์ธ ์๋ (=2์ธ๋)๋ฅผ ๊ตฌํ๋ค.
2. 3์ธ๋ ๊ตฌํ๊ธฐ
# 3์ธ๋
SELECT ID
FROM ECOLI_DATA
WHERE PARENT_ID IN (
# 2์ธ๋
SELECT ID
FROM ECOLI_DATA
WHERE PARENT_ID IN (
# 1์ธ๋
SELECT ID
FROM ECOLI_DATA
WHERE PARENT_ID IS NULL
)
)
ORDER BY ID;
1์์ ๊ตฌํ 2์ธ๋๋ฅผ ๋ถ๋ชจ๋ก ํ๋ ์๋ (3์ธ๋)๋ฅผ ๊ตฌํ๋ค.
์ด ๋ฐฉ๋ฒ์ด ๋ง๋์ง์ ๋ํ ์๋ฌธ์ ๊ฐ์ก์ง๋ง LEVEL 4 ์น๊ณ ๋ ์๊ฐ๋ณด๋ค ์ฌ์ด ๋ฌธ์ ์๋ค .!!