時間:2024-03-13 13:57作者:下載吧人氣:23
背景
在樹形遞歸查詢這篇文章,我記錄了使用CTE語法查詢樹形結構的辦法。在一個樹形結構中,每一個節點最多有一個上級,可以有任意個數的下級。
在實際場景中,我們還會遇到對圖(graph)的查詢,圖和樹的最大區別是,圖的節點可以有任意個數的上級和下級。如下圖所示
因為圖可能存在loop結構(上圖紅色箭頭),所以在使用CTE遞歸的過程中,必須要破環(break loop),否則算法就會進入無限遞歸,永不結束。
存儲和查詢圖結構,目前當紅數據庫是neo4j,但是當數據量只有十幾萬條的時候,PostgreSQL完全可以勝任。
構造樣本數據
— 每一條有向關系邊都存在上游,下游兩個節點
drop table if exists demo.t_rel;
create table if not exists demo.t_rel(up int , down int);
— 唯一約束,避免插入相同的關系
alter table demo.t_rel add constraint udx_t_rel unique (up, down);
insert into demo.t_rel values(6,5),(3,7),(5,1),(1,2),(5,2),(5,7),(7,2),(2,4),(7,4);
— 構造一條環數據,7-2-4-7
delete from demo.t_rel where up=4 and down=7;
insert into demo.t_rel values(4,7);
網友評論