사용자 도구

사이트 도구


기술문서:레퍼런스:쿼리:응용:recursive_query

차이

문서의 선택한 두 판 사이의 차이를 보여줍니다.

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
기술문서:레퍼런스:쿼리:응용:recursive_query [2025/04/15 10:23]
carlito76
기술문서:레퍼런스:쿼리:응용:recursive_query [2025/11/27 12:05] (현재)
carlito76
줄 6: 줄 6:
 ====== Recursive Query ====== ====== Recursive Query ======
  
-^  물리명  ^  논리명  ^  타입  ^  KEY  ^ +<note tip> 
-| 코드ID | cd_id | 문자 | PK | +최소 지원 버전은 약간의 차이가 있을 수 있습니다. 
-| 코드명 | cd_nm | 문자 | | +</note>
-| 부모 코드ID | parent_cd_id | 문자 | | +
-| 정렬 순서 | sort_order | 숫자 | |+
  
 +===== 테이블 명세 =====
 +^  물리명  ^  논리명  ^  타입  ^  길이  ^  KEY  ^
 +| 코드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/MariaDB & MSSQL & PostgreSQL 
-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/Tibero 
 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 NUMBER NOT NULL+ sort_order INT NOT NULL
 ); );
 </sxh> </sxh>
줄 56: 줄 53:
 ===== MySQL/MariaDB ===== ===== MySQL/MariaDB =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
--- MySQL 8.0 이상/MariaDB 10.2.2 이상+/* 
 + MySQL 8.0.1 이상/MariaDB 10.2.2 이상 
 +*/
 WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth, seq) AS ( WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth, seq) AS (
  SELECT  SELECT
줄 86: 줄 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 = a.parent_cd_id
 ) )
 SELECT SELECT
줄 99: 줄 98:
 ===== MSSQL ===== ===== MSSQL =====
 <sxh sql; gutter: true;> <sxh sql; gutter: true;>
--- MSSQL 2005 이상+/* 
 + MSSQL 2005 이상 
 +*/
 WITH tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth, seq) AS ( WITH tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth, seq) AS (
  SELECT  SELECT
줄 129: 줄 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 = a.parent_cd_id
 ) )
 SELECT SELECT
줄 141: 줄 142:
  
 ===== Oracle/Tibero ===== ===== Oracle/Tibero =====
-<sxh sql; gutter: true; highlight: [88];> +<sxh sql; gutter: true; highlight: [16, 92];> 
--- Oracle 9i 이상 +/* 
--- Tibero 최소 지원 버전 미+ Oracle 9i 이상/Tibero 3 이 
 +*/
 SELECT SELECT
  cd_id  cd_id
줄 162: 줄 164:
 ; ;
  
--- Oracle 11g 이상 +/* 
--- Tibero 최소 지원 버전 미+ Oracle 11g 이상/Tibero 3 이 
 +*/
 WITH tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth, seq) AS ( WITH tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth, seq) AS (
  SELECT  SELECT
줄 193: 줄 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 = a.parent_cd_id
 ) )
 SELECT SELECT
줄 203: 줄 206:
 ; ;
  
--- Oracle 12c 이상+/* 
 + Oracle 12c 이상 
 +*/
 WITH tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth) AS ( WITH tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth) AS (
  SELECT  SELECT
줄 227: 줄 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 = a.parent_cd_id
 ) )
 SEARCH DEPTH FIRST BY sort_order SET seq SEARCH DEPTH FIRST BY sort_order SET seq
줄 240: 줄 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, sort_order, cd_lvl, cd_nm_depth, seq) AS ( WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth, seq) AS (
  SELECT  SELECT
줄 267: 줄 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 = a.parent_cd_id
 ) )
 SELECT SELECT
줄 277: 줄 284:
 ; ;
  
--- PostgreSQL 14 이상+/* 
 + PostgreSQL 14 이상 
 +*/
 WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth) AS ( WITH RECURSIVE tree (cd_id, cd_nm, parent_cd_id, sort_order, cd_lvl, cd_nm_depth) AS (
  SELECT  SELECT
줄 301: 줄 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 = a.parent_cd_id
 ) )
 SEARCH DEPTH FIRST BY sort_order SET seq SEARCH DEPTH FIRST BY sort_order SET seq
줄 312: 줄 321:
 ; ;
 </sxh> </sxh>
 +
 +{{tag>"쿼리" "Query" "응용"}}