BOM 트리 구조를 SQL에서 셀프조인 샘플

BOM 트리 구조를 SQL에서 셀프조인(SELF JOIN) 또는 계층형 쿼리로 조회하는 대표적인 쿼리 예시는 다음과 같습니다.

Oracle: 계층형 쿼리 (CONNECT BY)

Oracle 등에서 BOM 트리 구조(부모-자식 관계)가 있는 테이블이 아래와 같다고 가정할 때:

  • item_id: 품목 ID

  • item_name: 품목명

  • parent_id: 상위 품목 ID

본체(item_id = '1002')를 시작으로 하위 모든 BOM 구성품을 트리 구조로 조회하는 쿼리입니다.

sql
SELECT LEVEL,
LPAD(' ', 2*(LEVEL-1)) || item_name AS item_names,
item_id,
parent_id
FROM bom
START WITH item_id = '1002'
CONNECT BY PRIOR item_id = parent_id;
  • LEVEL: 계층의 깊이

  • LPAD: 들여쓰기(트리 형태 시각화)

  • 본체 품목에서 시작하여 하위 구성품까지 모두 재귀적으로 조회.​

MySQL/MariaDB: 재귀 CTE (WITH RECURSIVE)

MySQL, MariaDB 등에서 사용하는 재귀 CTE 쿼리 예시입니다.

sql
WITH RECURSIVE bom_tree AS (
SELECT item_id, item_name, parent_id, 1 AS depth
FROM bom
WHERE item_id = '1002'
UNION ALL
SELECT b.item_id, b.item_name, b.parent_id, t.depth + 1
FROM bom b
JOIN bom_tree t ON t.item_id = b.parent_id
)
SELECT * FROM bom_tree;
  • WITH RECURSIVE: 재귀적 자기참조를 위해 사용

  • 본체부터 하위 BOM까지 연쇄적으로 조회.​

셀프조인 (Self Join) 예시

BOM 트리 구조를 SQL에서 셀프조인 샘플

특정 품목의 상위/하위 관계만 간단히 본다면 셀프조인을 다음과 같이 사용할 수 있습니다.

sql
SELECT c.item_name AS child, p.item_name AS parent
FROM bom c
LEFT JOIN bom p ON c.parent_id = p.item_id;
  • child, parent를 한 줄로 매칭하여 보여줍니다.​


이와 같이 DBMS에 맞게 계층형 구조(BOM트리)를 재귀(CTE), 계층쿼리, 셀프조인을 통해 조회할 수 있습니다.