次のように、グラフ検索を実行して、開始点からアクセス可能なすべてのノードを見つけようとしています。
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」句は、再帰式にとって重要です。これは、終了点を提供するためです。(それがなければ、無限再帰が得られます。)これは非常に循環的なグラフであるため、この質問に対する受け入れられた回答のように、世代カウントを使用しても役に立ちません。
繰り返し実行するストアド プロシージャを作成せずに、これを回避する方法はありますか?