문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
기술문서:레퍼런스:쿼리:응용:recursive_query [2025/04/28 19:53] carlito76 |
기술문서:레퍼런스:쿼리:응용:recursive_query [2025/11/27 12:05] (현재) carlito76 |
||
|---|---|---|---|
| 줄 10: | 줄 10: | ||
| </ | </ | ||
| - | ^ 물리명 | + | ===== 테이블 명세 ===== |
| - | | 코드ID | cd_id | 문자형 | PK | | + | ^ 물리명 |
| - | | 코드명 | cd_nm | 문자형 | | | + | | 코드ID | cd_id | 문자형 |
| - | | 부모 코드ID | parent_cd_id | 문자형 | | | + | | 코드명 | cd_nm | 문자형 |
| - | | 정렬 순서 | sort_order | 숫자형 | | | + | | 부모 코드ID | parent_cd_id | 문자형 |
| + | | 정렬 순서 | sort_order | 숫자형 | ||
| + | ===== SQL 스크립트 ===== | ||
| <sxh sql; gutter: true; title: DDL;> | <sxh sql; gutter: true; title: DDL;> | ||
| - | -- MySQL/ | ||
| CREATE TABLE ex_recursive ( | CREATE TABLE ex_recursive ( | ||
| cd_id VARCHAR(100) NOT NULL PRIMARY KEY, | cd_id VARCHAR(100) NOT NULL PRIMARY KEY, | ||
| cd_nm VARCHAR(100) NOT NULL, | cd_nm VARCHAR(100) NOT NULL, | ||
| parent_cd_id VARCHAR(100), | parent_cd_id VARCHAR(100), | ||
| - | sort_order | + | sort_order |
| - | ); | + | |
| - | + | ||
| - | -- Oracle/ | + | |
| - | CREATE TABLE ex_recursive ( | + | |
| - | cd_id VARCHAR(100) NOT NULL PRIMARY KEY, | + | |
| - | cd_nm VARCHAR(100) NOT NULL, | + | |
| - | parent_cd_id VARCHAR(100), | + | |
| - | sort_order NUMBER | + | |
| ); | ); | ||
| </ | </ | ||
| 줄 60: | 줄 53: | ||
| ===== MySQL/ | ===== MySQL/ | ||
| <sxh sql; gutter: true;> | <sxh sql; gutter: true;> | ||
| - | -- MySQL 8.0 이상/ | + | /* |
| + | MySQL 8.0.1 이상/ | ||
| + | */ | ||
| WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, | WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, | ||
| SELECT | SELECT | ||
| 줄 90: | 줄 85: | ||
| ex_recursive a | ex_recursive a | ||
| INNER JOIN tree b | INNER JOIN tree b | ||
| - | ON a.parent_cd_id = b.cd_id | + | ON b.cd_id |
| ) | ) | ||
| SELECT | SELECT | ||
| 줄 103: | 줄 98: | ||
| ===== MSSQL ===== | ===== MSSQL ===== | ||
| <sxh sql; gutter: true;> | <sxh sql; gutter: true;> | ||
| - | -- MSSQL 2005 이상 | + | /* |
| + | MSSQL 2005 이상 | ||
| + | */ | ||
| WITH tree (cd_id, cd_nm, parent_cd_id, | WITH tree (cd_id, cd_nm, parent_cd_id, | ||
| SELECT | SELECT | ||
| 줄 133: | 줄 130: | ||
| ex_recursive a | ex_recursive a | ||
| INNER JOIN tree b | INNER JOIN tree b | ||
| - | ON a.parent_cd_id = b.cd_id | + | ON b.cd_id |
| ) | ) | ||
| SELECT | SELECT | ||
| 줄 145: | 줄 142: | ||
| ===== Oracle/ | ===== Oracle/ | ||
| - | <sxh sql; gutter: true; highlight: [15, 88];> | + | <sxh sql; gutter: true; highlight: [16, 92];> |
| - | -- Oracle 9i 이상 | + | /* |
| - | -- Tibero 3 이상 | + | Oracle 9i 이상/Tibero 3 이상 |
| + | */ | ||
| SELECT | SELECT | ||
| cd_id | cd_id | ||
| 줄 166: | 줄 164: | ||
| ; | ; | ||
| - | -- Oracle 11g 이상 | + | /* |
| - | -- Tibero 3 이상 | + | Oracle 11g 이상/Tibero 3 이상 |
| + | */ | ||
| WITH tree (cd_id, cd_nm, parent_cd_id, | WITH tree (cd_id, cd_nm, parent_cd_id, | ||
| SELECT | SELECT | ||
| 줄 197: | 줄 196: | ||
| ex_recursive a | ex_recursive a | ||
| INNER JOIN tree b | INNER JOIN tree b | ||
| - | ON a.parent_cd_id = b.cd_id | + | ON b.cd_id |
| ) | ) | ||
| SELECT | SELECT | ||
| 줄 207: | 줄 206: | ||
| ; | ; | ||
| - | -- Oracle 12c 이상 | + | /* |
| + | Oracle 12c 이상 | ||
| + | */ | ||
| WITH tree (cd_id, cd_nm, parent_cd_id, | WITH tree (cd_id, cd_nm, parent_cd_id, | ||
| SELECT | SELECT | ||
| 줄 231: | 줄 232: | ||
| ex_recursive a | ex_recursive a | ||
| INNER JOIN tree b | INNER JOIN tree b | ||
| - | ON a.parent_cd_id = b.cd_id | + | ON b.cd_id |
| ) | ) | ||
| SEARCH DEPTH FIRST BY sort_order SET seq | SEARCH DEPTH FIRST BY sort_order SET seq | ||
| 줄 244: | 줄 245: | ||
| ===== PostgreSQL ===== | ===== PostgreSQL ===== | ||
| - | <sxh sql; gutter: true; highlight: [63];> | + | <sxh sql; gutter: true; highlight: [67];> |
| - | -- PostgreSQL 8.4 이상 | + | /* |
| + | PostgreSQL 8.4 이상 | ||
| + | */ | ||
| WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, | WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, | ||
| SELECT | SELECT | ||
| 줄 271: | 줄 274: | ||
| ex_recursive a | ex_recursive a | ||
| INNER JOIN tree b | INNER JOIN tree b | ||
| - | ON a.parent_cd_id = b.cd_id | + | ON b.cd_id |
| ) | ) | ||
| SELECT | SELECT | ||
| 줄 281: | 줄 284: | ||
| ; | ; | ||
| - | -- PostgreSQL 14 이상 | + | /* |
| + | PostgreSQL 14 이상 | ||
| + | */ | ||
| WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, | WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, | ||
| SELECT | SELECT | ||
| 줄 305: | 줄 310: | ||
| ex_recursive a | ex_recursive a | ||
| INNER JOIN tree b | INNER JOIN tree b | ||
| - | ON a.parent_cd_id = b.cd_id | + | ON b.cd_id |
| ) | ) | ||
| SEARCH DEPTH FIRST BY sort_order SET seq | SEARCH DEPTH FIRST BY sort_order SET seq | ||
| 줄 316: | 줄 321: | ||
| ; | ; | ||
| </ | </ | ||
| + | |||
| + | {{tag>" | ||