PostgreSQL 遞歸查詢

數據庫中的數據存在父子關係(單繼承,每一條記錄只有一個父親).  若是要查詢一條記錄以及他的全部子記錄,或者要查詢一條記錄以及他的全部父記錄.那麼遞歸查詢就再合適不過了.能夠簡化複雜的SQL語句 sql

如今數據庫有一張Place表,用於存放中國的地區信息. 數據庫


CREATE TABLE place
(
  id serial NOT NULL,                    --主鍵
  name character varying(200),           --地區名
  parent_id bigint,                      --外鍵  父地區
  CONSTRAINT place_pkey PRIMARY KEY (id) --主鍵約束
)


數據庫數據以下 spa


向下遞歸 code

查詢安徽以及安徽一下的全部記錄 繼承


WITH RECURSIVE r AS ( 
       SELECT * FROM place WHERE id = 2
     union   ALL 
       SELECT place.* FROM place, r WHERE place.parent_id = r.id 
     ) 
SELECT * FROM r ORDER BY id;

查詢結果以下 遞歸


向上遞歸 io

查詢三亞以及三亞以上全部記錄 class

WITH RECURSIVE r AS ( 
       SELECT * FROM place WHERE id = 8
     union   ALL 
       SELECT place.* FROM place, r WHERE place.id = r.parent_id 
     ) 
SELECT * FROM r ORDER BY id;
查詢結果以下

相關文章
相關標籤/搜索