深度递归与广度递归(DFS,BFS)实现

在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 伪列

相关推荐
不正经学生5 小时前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
毕竟是shy哥7 小时前
计算YOLO数据集中每个类的目标数
算法·yolo·机器学习
M78佐菲7 小时前
Linux学习笔记:TCP协议
linux·笔记·学习·tcp/ip·算法
晊晌_h9 小时前
嵌入式从0到精通——数据结构总结[特殊字符]
数据结构·算法·排序算法
我找到地球的支点啦9 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
罗西的思考9 小时前
【OpenClaw具身硬件】ZeroClaw 源码阅读笔记(3)--- RAG
人工智能·算法·机器学习
浪里镖客10 小时前
位姿转换矩阵写法-个人习惯(计算机理解其实是相反的)
线性代数·算法·矩阵
小白羊丨13 小时前
如何诊断 Prompt 模板导致的效果下降?
人工智能·算法·prompt
OPEN-F14 小时前
C++11/14新特性精讲:移动语义与智能指针实战
开发语言·c++·算法
lisin-lee-cooper15 小时前
【leetcode658】有序数组找出k个最接近x的数
java·数据结构·算法