SQL Server で CTE を試していますが、次のシナリオを機能させるには行き詰まりました。次のような階層テーブルがあります。
Node(ID:439)
Node(ID:123)
Node(ID:900)
Node(ID:56)
Node(ID:900)
予想された結果:
NodeID ParentNodeID
439 0
123 439
900 123
56 439
900 56
したがって、基本的に親子階層テーブルがありますが、1 つの微妙な違いがあります。それぞれの子は、複数の親を持つ可能性があります。親子レコードを返す CTE の作成について、多くのブログ記事と StackOverflow 投稿を調査しましたが、それらは子のすべての親を返すわけではなく、最初に見つかったものだけを返します。
私が試したCTEの例を次に示します。
WITH Hierarchy(NodeID, ParentNodeID)
AS
(
SELECT
T1.NodeID,
T1.ParentNodeID
FROM
ParentChildTable T1
WHERE
T1.NodeID = 439
UNION ALL
SELECT
T1.NodeID,
T1.ParentNodeID
FROM
Heirarchy T1
INNER JOIN Heirarchy TH ON TH.NodeID = T1.ParentNodeID
)
(注: 上記の CTE のテーブルと列の名前は、プライバシーを保護するために元の名前から変更されています。)
上記の CTE は正常に動作し、ID:439 から始まるすべての親子レコードを検索しますが、2 つの親があるにもかかわらず、アイテム ID:900 の親を 1 つだけ検索します。
CTEを使用してこれが可能かどうか、またはこれを行う別のSQL方法があるかどうかを誰かに教えてもらえますか?
乾杯。ヤス。