在PG 14及以上数据库中支持DFS,BFS递归
语法如下
sql
WITH RECURSIVE part_tmp(id, pid, name) AS (
SELECT id, pid, name FROM part WHERE pid IS NULL
UNION ALL
SELECT d.id, d.pid, d.name FROM part d JOIN part_tmp t ON d.pid = t.id
) SEARCH BREADTH FIRST BY id SET ordercol
SELECT * FROM part_tmp ORDER BY ordercol;
插入测试数据
sql
drop table if exists part;
create table part(id int,pid int,name varchar(255) );
insert into part values(0,null,'南大通用');
insert into part values(1,0,'8s');
insert into part values(2,0,'8a');
insert into part values(3,0,'8c');
insert into part values(4,1,'8s产品部');
insert into part values(5,1,'8s测试部');
insert into part values(6,4,'8s产品部-产品1组');
insert into part values(7,4,'8s产品部-产品2组');
insert into part values(8,4,'8s产品部-产品3组');
结果如下

在gbase8s 数据库中,无 WITH RECURSIVE SEARCH BREADTH FIRST BY id SET 语法糖,可以使用自身的connect by递归实现 DFS,BFS,如下,能模拟出PG 特有的set 伪列
