- Recursive Query 중 WHERE parent IS NULL 부분에 NULL이 아닌 값이 들어갈 경우 문제가 되는것 같다. 왜 그러는지는 아직 이해가 안됨.(이유가 있게지요...)
- Recursive Query 를 보면 알겠지만, 사실상 별도의 레벨 컬럼이 필요 없다.
- 포스팅하면서 쿼리나 컬럼명 등 수정해서 올린거라 보기가 참 그럼...(-_-!!)
[테이블 생성]
CREATE TABLE facility ( cd character(20) NOT NULL, -- 코드 nm text NOT NULL, -- 명 level numeric(1,0) NOT NULL, -- 레벨(위 쿼리에서는 사실상 필요 없음.) parent character(20) DEFAULT NULL, -- 상위코드 alias_nm character(40), -- 디스플레이명 CONSTRAINT facility_pkey PRIMARY KEY (cd) )
[샘플 데이터 저장]
INSERT INTO facility( cd, nm, level, parent, alias_nm ) VALUES ('0000', '건물', 0, null, '건물명'); INSERT INTO facility( cd, nm, level, parent, alias_nm ) VALUES ('0001', '1층', 1, '0000', '1층 명'); INSERT INTO facility( cd, nm, level, parent, alias_nm ) VALUES ('0002', '2층', 1, '0000', '2층 명'); INSERT INTO facility( cd, nm, level, parent, alias_nm ) VALUES ('0003', '3층', 1, '0000', '3층 명'); INSERT INTO facility( cd, nm, level, parent, alias_nm ) VALUES ('0004', '101호', 2, '0001', '101호 명'); INSERT INTO facility( cd, nm, level, parent, alias_nm ) VALUES ('0005', '102호', 2, '0001', '102호 명'); INSERT INTO facility( cd, nm, level, parent, alias_nm ) VALUES ('0006', '201호', 2, '0002', '201호 명'); INSERT INTO facility( cd, nm, level, parent, alias_nm ) VALUES ('0007', '301호', 2, '0003', '301호 명');
[Recursive Query]
WITH RECURSIVE tb_result( lv, path, cd, nm, level, parent ) AS ( SELECT 0, nm, cd, nm, level, parent FROM facility WHERE parent IS NULL UNION ALL SELECT b.lv+1, path || ' > ' || a.nm, a.cd, a.nm, a.level, a.parent FROM facility AS a JOIN tb_result AS b ON a.parent = b.cd ) SELECT lv, path, cd, nm, level, parent FROM tb_result ORDER BY path
댓글