我正在尝试运行图形搜索以查找从起点可访问的所有节点,如下所示:
with recursive
nodes_traversed as (
select START_NODE ID
from START_POSITION
union all
select ed.DST_NODE
from EDGES ed
join nodes_traversed NT
on (NT.ID = ed.START_NODE)
and (ed.DST_NODE not in (select ID from nodes_traversed))
)
select distinct * from nodes_traversed
不幸的是,当我尝试运行它时,我收到一个错误:
递归 CTE 成员 (nodes_traversed) 只能在 FROM 子句中引用自己。
但是,“not in select”子句对递归表达式很重要,因为它提供了结束点。(没有它,您将获得无限递归。)使用世代计数,就像在这个问题的公认答案中一样,将无济于事,因为这是一个高度循环的图。
有没有办法解决这个问题,而不必创建一个迭代的存储过程?