CTEを使用してすべての子ノード(現在のノードを含む)をSQLで取得する例が多数あります。簡単な例は次のとおりです。SQLで指定されたノードの親ノードと子ノードをすべて検索するクエリ
;WITH #results AS
(
SELECT ChildId,
ParentId
FROM History
WHERE ChildId= @selected
UNION ALL
SELECT t.ChildId,
t.ParentId
FROM History t
INNER JOIN #results r ON r.ExpirationList = t.ParentId
)
SELECT *
FROM #results;
上記のクエリは、私に特定のノードのすべての子ノードを与えます。 - > B - > C - > D - > Eと私は= "C"、そして、私はCとして結果を得る@selected渡す - 私の質問はどのようにある> E.
- > D A:例えばのために私が何を渡すかにかかわらず、完全なチェーンを手に入れますか? @selected = "D"の場合は、結果をA - > B - > C - >D - > Eおよび とすると、結果はA - > Bとなります。 - > C - >D - > E.
私は、指定されたノードの親ノードと子ノードの両方が必要です。誰かが同じ質問をしてくれますか?
あなたの提案に感謝しています。しかし、それは無限回帰に入った。 –
これは私が受け取ったエラーメッセージです。 ステートメントが終了しました。文の完了前に最大再帰32767が使い尽くされました。 –
私は答えを変更した - 謝罪、それは無限再帰を引き起こしていた右手を。上記のように、これを防ぐために2つの別個のCTEを使用する必要があります。次に、それらを組み合わせるために共用体を使用します。 – Chriz