본문 바로가기

카테고리 없음

postgresql 계층형 쿼리

반응형

CREATE TABLE BOM( 
ITEM_ID INTEGER NOT NULL,
PARENT_ID INTEGER,
ITEM_NAME CHARACTER VARYING(20) NOT NULL,
ITEM_QTY INTEGER,
CONSTRAINT BOM_KEY PRIMARY KEY (ITEM_ID)
);

 

INSERT INTO BOM VALUES (1001, null, ‘컴퓨터’, 1);
INSERT INTO BOM VALUES (1002, 1001, ‘본체’, 1);
INSERT INTO BOM VALUES (1003, 1001, ‘모니터’, 1);
INSERT INTO BOM VALUES (1004, 1001, ‘프린터’, 1);
INSERT INTO BOM VALUES (1005, 1002, ‘메인보드’, 1);
INSERT INTO BOM VALUES (1006, 1002, ‘렌카드’, 1);
INSERT INTO BOM VALUES (1007, 1002, ‘파워’, 1);
INSERT INTO BOM VALUES (1008, 1005, ‘RAM’, 1);
INSERT INTO BOM VALUES (1009, 1005, ‘CPU’, 1);
INSERT INTO BOM VALUES (1010, 1005, ‘그래픽카드’, 1);
INSERT INTO BOM VALUES (1011, 1005, ‘기타장치’, 1);

 

 

WITH RECURSIVE search_bom(
  ITEM_ID, PARENT_ID, ITEM_NAME, ITEM_QTY, 
  LEVEL
) AS (
  SELECT 
    g.ITEM_ID, 
    g.PARENT_ID, 
    g.ITEM_NAME, 
    g.ITEM_QTY, 
    0 
  FROM 
    BOM g 
  WHERE 
    g.PARENT_ID IS NULL 
  UNION ALL 
  SELECT 
    g.ITEM_ID, 
    g.PARENT_ID, 
    g.ITEM_NAME, 
    g.ITEM_QTY, 
    LEVEL + 1 
  FROM 
    BOM g, 
    search_bom sb 
  WHERE 
    g.PARENT_ID = sb.ITEM_ID

SELECT 
  ITEM_ID, 
  PARENT_ID, 
  lpad('', LEVEL) || ITEM_NAME, 
  ITEM_QTY, 
  LEVEL 
FROM 
  search_bom

 

 

 

출처:

happy1week.blogspot.com/2012/07/postgresql_19.html

 

PostgreSQL 계층형 쿼리 따라하기

PostgreSQL에서는 오라클에서 계층형 쿼리라고 표현하는 start with, connect by 구문을 지원하지 않는다. 따라서 PostgreSQL에서 데이터를 계층형의 트리 구조로 표현하기 위해 RECURSIVE 키워드를 사용하여

happy1week.blogspot.com

 

반응형