1) ๋ฌธ์ ์ค๋ช
- ์ด๋ ํ ๊ฒ์์์ ์ฌ์ฉ๋๋ ์์ดํ ๋ค์ ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- 'ITEM_A'->'ITEM_B'์ ๊ฐ์ด ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํ ๋'ITEM_A'๋ฅผ 'ITEM_B'์ PARENT ์์ดํ ,PARENT ์์ดํ ์ด ์๋ ์์ดํ ์ ROOT ์์ดํ ์ด๋ผ๊ณ ํฉ๋๋ค.
- ์๋ฅผ ๋ค์ด 'ITEM_A'->'ITEM_B'->'ITEM_C' ์ ๊ฐ์ด ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํ ์์ดํ ์ด ์๋ค๋ฉด'ITEM_C'์ PARENT ์์ดํ ์ 'ITEM_B','ITEM_B'์ PARENT ์์ดํ ์ 'ITEM_A', ROOT ์์ดํ ์ 'ITEM_A'๊ฐ ๋ฉ๋๋ค.
- ๋ค์์ ํด๋น ๊ฒ์์์ ์ฌ์ฉ๋๋ ์์ดํ ์ ๋ณด๋ฅผ ๋ด์ ITEM_INFO ํ ์ด๋ธ๊ณผ ์์ดํ ๊ด๊ณ๋ฅผ ๋ํ๋ธ ITEM_TREE ํ ์ด๋ธ์ ๋๋ค.
- ITEM_INFO ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ITEM_ID, ITEM_NAME, RARITY, PRICE๋ ๊ฐ๊ฐ ์์ดํ ID, ์์ดํ ๋ช , ์์ดํ ์ ํฌ๊ท๋, ์์ดํ ์ ๊ฐ๊ฒฉ์ ๋ํ๋ ๋๋ค.
Column name | Type | Nullable |
ITEM_ID | INTEGER | FALSE |
ITEM_NAME | VARCHAR(N) | FALSE |
RARITY | INTEGER | FALSE |
PRICE | INTEGER | FALSE |
- ITEM_TREE ํ ์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ผ๋ฉฐ, ITEM_ID, PARENT_ITEM_ID๋ ๊ฐ๊ฐ ์์ดํ ID, PARENT ์์ดํ ์ ID๋ฅผ ๋ํ๋ ๋๋ค.
Column name | Type | Nullable |
ITEM_ID | INTEGER | FALSE |
PARENT_ITEM_ID | INTEGER | TRUE |
- ๋จ, ๊ฐ ์์ดํ ๋ค์ ์ค์ง ํ๋์ PARENT ์์ดํ ID ๋ฅผ ๊ฐ์ง๋ฉฐ, ROOT ์์ดํ ์ PARENT ์์ดํ ID ๋ NULL ์ ๋๋ค.
- ROOT ์์ดํ ์ด ์๋ ๊ฒฝ์ฐ๋ ์กด์ฌํ์ง ์์ต๋๋ค.
2) ๋ฌธ์
- ๋ ์ด์ ์ ๊ทธ๋ ์ด๋ํ ์ ์๋ ์์ดํ ์ ์์ดํ ID(ITEM_ID), ์์ดํ ๋ช (ITEM_NAME), ์์ดํ ์ ํฌ๊ท๋(RARITY)๋ฅผ ์ถ๋ ฅํ๋ SQL ๋ฌธ์ ์์ฑํด ์ฃผ์ธ์.
- ์ด๋ ๊ฒฐ๊ณผ๋ ์์ดํ ID๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌํด ์ฃผ์ธ์.
3) ์์
- ์๋ฅผ ๋ค์ด ITEM_INFO ํ ์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๊ณ
ITEM_ID | ITEM_NAME | RARITY | PRICE |
0 | ITEM_A | RARE | 10000 |
1 | ITEM_B | RARE | 9000 |
2 | ITEM_C | LEGEND | 11000 |
3 | ITEM_D | RARE | 10000 |
4 | ITEM_E | RARE | 12000 |
- ITEM_TREE ํ ์ด๋ธ์ด ๋ค์๊ณผ ๊ฐ๋ค๋ฉด
ITEM_ID | PARENT_ITEM_ID |
0 | NULL |
1 | 0 |
2 | 0 |
3 | 1 |
4 | 1 |
- 'ITEM_A' ๋ 'ITEM_B', 'ITEM_C' ๋ก ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํ๋ฉฐ 'ITEM_B' ๋ 'ITEM_D', 'ITEM_E' ๋ก ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
- 'ITEM_C', 'ITEM_D', 'ITEM_E' ๋ ๋ ์ด์ ์ ๊ทธ๋ ์ด๋๊ฐ ๊ฐ๋ฅํ์ง ์์ผ๋ฏ๋ก ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ด ๋์์ผ ํฉ๋๋ค.
ITEM_ID | ITEM_NAME | RARITY |
4 | ITEM_E | RARE |
3 | ITEM_D | RARE |
2 | ITEM_C | LEGEND |
4) ํ์ด
SELECT
ITEM_ID,
ITEM_NAME,
RARITY
FROM ITEM_INFO
WHERE ITEM_ID NOT IN (SELECT DISTINCT PARENT_ITEM_ID
FROM ITEM_TREE
WHERE PARENT_ITEM_ID IS NOT NULL)
ORDER BY ITEM_ID DESC;
[Reference]
๋ฐ์ํ