사용자 도구

사이트 도구


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

차이

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

차이 보기로 링크

양쪽 이전 판 이전 판
다음 판
이전 판
기술문서:레퍼런스:쿼리:응용:recursive_query [2025/04/28 19:53]
carlito76
기술문서:레퍼런스:쿼리:응용:recursive_query [2025/11/27 12:05] (현재)
carlito76
줄 10: 줄 10:
 </note> </note>
  
-^  물리명  ^  논리명  ^  타입  ^  KEY  ^ +===== 테이블 명세 ===== 
-| 코드ID | cd_id | 문자형 | PK | +^  물리명  ^  논리명  ^  타입   길이   KEY  ^ 
-| 코드명 | cd_nm | 문자형 | | +| 코드ID | cd_id | 문자형 | 100 | PK | 
-| 부모 코드ID | parent_cd_id | 문자형 | | +| 코드명 | cd_nm | 문자형 | 100 | | 
-| 정렬 순서 | sort_order | 숫자형 | |+| 부모 코드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 ( 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 BIGINT NOT NULL + sort_order INT NOT NULL
-); +
- +
--- Oracle/Tibero +
-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 NOT NULL+
 ); );
 </sxh> </sxh>
줄 60: 줄 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
줄 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 = a.parent_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, 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
줄 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 = a.parent_cd_id
 ) )
 SELECT SELECT
줄 145: 줄 142:
  
 ===== Oracle/Tibero ===== ===== Oracle/Tibero =====
-<sxh sql; gutter: true; highlight: [1588];> +<sxh sql; gutter: true; highlight: [1692];> 
--- 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, 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
줄 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 = a.parent_cd_id
 ) )
 SELECT SELECT
줄 207: 줄 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
줄 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 = a.parent_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, 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
줄 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 = a.parent_cd_id
 ) )
 SELECT SELECT
줄 281: 줄 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
줄 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 = a.parent_cd_id
 ) )
 SEARCH DEPTH FIRST BY sort_order SET seq SEARCH DEPTH FIRST BY sort_order SET seq
줄 316: 줄 321:
 ; ;
 </sxh> </sxh>
 +
 +{{tag>"쿼리" "Query" "응용"}}