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