본문 바로가기
Today I learned

2021 02 16 - SQL과 반복문

by soheemon 2021. 2. 16.

인접리스트 모델과 재귀쿼리

우편번호를 키로 삼아서 데이터를 줄줄이 연결한것을 포인터 체인이라고 한다. 계층구조를 표현하는 고전적인 방법임

예를들어 이를 절차지향 언어에서 찾는다면, 현재 주소의 레코드부터 출발해서 이전 주소가 없을때 까지 처리를 반복하면 가장 오래된 주소를 찾을 수 있다.

 

SQL에서 계층구조를 찾는 방법중 하나는 재귀공통 테이블식을 사용하는 방법이다.

 

WITH RECURSIVE Explosion (name, pcode, new_pcode, depth)
AS
(
  SELECT name, pcode, new_pcode, 1
      FROM PostalHistory
  WHERE name = 'A'
      AND new_pcode IS NULL	-- 검색 시작
UNION
  SELECT Child.name, Child.pcode, Child.new_pcode, depth +1
  FROM Explosion AS Parent, PostalHistory AS Child
  WHERE Parent.pcode = Child.new_pcode
  AND	Parent.name = Child.name
)
-- 메인 select 구문
SELECT name, pcode, new_pcode
FROM Explosion
WHERE depth = (SELECT MAX(depth) FROM Exposion);

재귀 공통 테이블식 Explosion은 A에 대해서 현재주소(new_pcode가 NULL인,)에서 시작해서 포인터 체인을 타고 올라가 과거 주소를 모두찾는다.

 

'Today I learned' 카테고리의 다른 글

2021 02 19 - SQL의 순서  (0) 2021.02.19
2021 02 19 - 서브쿼리  (0) 2021.02.19
2021 02 16 - CASE, CASE, CASE  (0) 2021.02.16
2021 02 08  (0) 2021.02.08
2021 02 08 - sql 소소한 정리  (0) 2021.02.08

댓글