문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
기술문서:레퍼런스:쿼리:응용:recursive_query [2025/04/15 10:18] carlito76 |
기술문서:레퍼런스:쿼리:응용:recursive_query [2026/06/19 10:52] (현재) carlito76 |
||
|---|---|---|---|
| 줄 6: | 줄 6: | ||
| ====== Recursive Query ====== | ====== Recursive Query ====== | ||
| - | ^ 물리명 | + | <note tip> |
| - | | 코드ID | cd_id | 문자 | PK | | + | 최소 지원 버전은 약간의 차이가 있을 수 있습니다.\\ |
| - | | 코드명 | cd_nm | 문자 | | | + | - MySQL/ |
| - | | 부모 코드ID | parent_cd_id | 문자 | | | + | - MSSQL, Oracle/ |
| - | | 정렬 순서 | sort_order | 숫자 | | | + | </ |
| + | ===== 테이블 명세 ===== | ||
| + | ^ 논리명 | ||
| + | | 코드ID | cd_id | 문자형 | 100 | PK | | ||
| + | | 코드명 | cd_nm | 문자형 | 100 | | | ||
| + | | 부모 코드ID | parent_cd_id | 문자형 | 100 | | | ||
| + | | 정렬 순서 | sort_order | 숫자형 | | | | ||
| + | |||
| + | ===== SQL 스크립트 ===== | ||
| <sxh sql; gutter: true; title: DDL;> | <sxh sql; gutter: true; title: DDL;> | ||
| - | -- MySQL/ | ||
| - | 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 BIGINT NOT NULL | ||
| - | ); | ||
| - | |||
| - | -- Oracle/ | ||
| 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 |
| ); | ); | ||
| </ | </ | ||
| 줄 56: | 줄 55: | ||
| ===== 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 | ||
| 줄 86: | 줄 87: | ||
| 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 | ||
| 줄 99: | 줄 100: | ||
| ===== 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 | ||
| 줄 124: | 줄 127: | ||
| , CAST((b.cd_nm_depth + ' > ' + a.cd_nm) AS NVARCHAR) | , CAST((b.cd_nm_depth + ' > ' + a.cd_nm) AS NVARCHAR) | ||
| , b.seq + ':' | , b.seq + ':' | ||
| - | -- , b.seq + ':' | + | -- , b.seq + ':' |
| -- , b.seq + ':' | -- , b.seq + ':' | ||
| FROM | FROM | ||
| 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 | ||
| 줄 141: | 줄 144: | ||
| ===== Oracle/ | ===== Oracle/ | ||
| - | <sxh sql; gutter: true; highlight: [88];> | + | <sxh sql; gutter: true; highlight: [16, 92];> |
| - | -- Oracle 9i 이상 | + | /* |
| - | -- Tibero | + | Oracle 9i 이상/Tibero |
| + | */ | ||
| SELECT | SELECT | ||
| cd_id | cd_id | ||
| 줄 162: | 줄 166: | ||
| ; | ; | ||
| - | -- Oracle 11g 이상 | + | /* |
| - | -- Tibero | + | Oracle 11g 이상/Tibero |
| + | */ | ||
| WITH tree (cd_id, cd_nm, parent_cd_id, | WITH tree (cd_id, cd_nm, parent_cd_id, | ||
| SELECT | SELECT | ||
| 줄 193: | 줄 198: | ||
| 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 | ||
| 줄 203: | 줄 208: | ||
| ; | ; | ||
| - | -- Oracle 12c 이상 | + | /* |
| + | Oracle 12c 이상 | ||
| + | */ | ||
| WITH tree (cd_id, cd_nm, parent_cd_id, | WITH tree (cd_id, cd_nm, parent_cd_id, | ||
| SELECT | SELECT | ||
| 줄 227: | 줄 234: | ||
| 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 | ||
| 줄 240: | 줄 247: | ||
| ===== 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 | ||
| 줄 267: | 줄 276: | ||
| 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 | ||
| 줄 277: | 줄 286: | ||
| ; | ; | ||
| - | -- 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 | ||
| 줄 301: | 줄 312: | ||
| 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 | ||
| 줄 312: | 줄 323: | ||
| ; | ; | ||
| </ | </ | ||
| + | |||
| + | {{tag>" | ||