私は多くのテーブル依存関係を持っていますが、これには2つの列SourceIdとDependsOnIdがあります。私は本当に与えられたIDのすべての扶養家族を再帰的に取得したいと思う。今のCTE再帰的クエリループ
私は次のクエリがあります。
with Rec(SourceId, DependsOnId)
as (
select SourceId, DependsOnId from [dbo].[Dependency]
union all
select Rec.SourceId, Rec.DependsOnId
from [dbo].[Dependency] d
join [dbo].[Dependency] dd
on d.SourceId = dd.DependsOnId and d.DependsOnId = dd.SourceId
join Rec
on Rec.DependsOnId = d.SourceId
)
SELECT * FROM Rec
OPTION (MAXRECURSION 30000);
をしかし、それは無限ループに好みます。私はなぜそれが1> 2および2> 1のような鏡の依存関係のためにあるのか理解しています。だから私はこのようなケースを一度だけ処理する必要があります。
あなたのお手伝いをお待ちしております。
いくつかのサンプル入力データを共有できますか? –
あなたのデータにサイクルがある場合、私は感謝の意を表すCTEがあなたのためにうまく動作しないことになります。あなたは基本的に組合よりも別個のものを実行する必要があり、CTEがそれをサポートしているかどうかは分かりませんしかし:))。一時テーブルがうまくいくかもしれません。 – Luaan
@Luaanありがとうございます。私は間違った方法で続いたことが分かった。私は一時的なテーブルを使用しようとします、あなたは正しい方向に私をプッシュすることができますか?なぜなら、とにかく再帰が必要なようですが、CTEはオプションではないと言いました。 –