SQL Server 网络图节点循环计算与递归路径查询实现
有向图场景下的SQL递归路径查询需求
基础表结构
通过两张关系表存储完整的有向网络图数据:
Nodes表:存储所有网络节点的信息,以节点唯一标识Id作为主键Edges表:存储节点之间的有向连接关系,通过FromId标识边的起点节点、ToId标识边的终点节点,以此表达“从某节点指向另一节点”的有向关联
两张表的建表语句定义如下:
CREATE TABLE Nodes( Id VARCHAR(10) PRIMARY KEY, Name VARCHAR(50) ); CREATE TABLE Edges( Id VARCHAR(100) PRIMARY KEY, FromId VARCHAR(10), ToId VARCHAR(10) );
上述两张表可完整描述有向网络图的结构,配套示例网络图中既包含常规的线性连接路径,也存在被黄色高亮矩形标注的节点闭环——这类闭环就是递归遍历过程中容易触发无限循环的风险点。
核心查询目标
需要编写支持递归逻辑的SQL查询,实现如下需求:
- 枚举所有从指定起始节点出发、途经任意数量中间节点后抵达目标终止节点的完整连接路径
- 遍历过程中自动识别已访问的节点,规避节点闭环导致的无限递归问题
- 遍历逻辑可参考爬虫的探索模式:为每个可到达的分支逐次排查可用连接,实时维护已访问节点的记录,沿路径持续向前遍历直到抵达目标节点即终止当前分支的探索;全量探索完成后,统一筛选出所有满足“从指定起点出发、最终到达目标终点”要求的有效路由,避免返回无关的路径结果。
内容的提问来源于stack exchange,提问作者DarioN1
相关产品推荐
相关产品推荐

