數據庫中的數據存在父子關係(單繼承,每一條記錄只有一個父親). 若是要查詢一條記錄以及他的全部子記錄,或者要查詢一條記錄以及他的全部父記錄.那麼遞歸查詢就再合適不過了.能夠簡化複雜的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;查詢結果以下