3

次のようなテーブルがあります

Node_Id     Node_Name     Parent_Node_Id
-------     ---------     --------------
1           Root          0
2           Node1         1
3           Node2         1
4           Node3         2
5           Node4         2
6           Node5         5
7           Node6         5
8           Node7         7

テーブルの各行には、「Parent_Node_Id」によって示される親行があり、各行/ノードは任意の数の行/ノードの親になることができます。

同じ親ノードを共有する親ノードを持つすべてのノードのリストを取得するクエリを作成するにはどうすればよいですか? Parent_Node_Id がパラメーターとして渡されます。たとえば、Parent_Node_Id が 2 として渡された場合、クエリは次を返します -

Node_Id     Node_Name     Parent_Node_Id
-------     ---------     --------------
4           Node3         2
5           Node4         2
6           Node5         5
7           Node6         5
8           Node7         7
4

1 に答える 1

3
;WITH CTE AS (
    SELECT Node_Id,Node_Name, Parent_Node_Id 
    FROM @a WHERE Parent_Node_Id = 2
    UNION ALL
    SELECT c.Node_Id,c.Node_Name, c.Parent_Node_Id 
    FROM @a c
    INNER JOIN CTE p ON p.Node_Id = c.Parent_Node_Id
)
Select * from CTE

サンプルデータ付き

Declare @a Table( Node_Id int,    Node_Name varchar(100),     Parent_Node_Id int)
insert into @a 

select 1,'Root',0 
UNION SELECT 2,'Node1',1
UNION SELECT 3,'Node2',1
UNION SELECT 4,'Node3',2
UNION SELECT 5,'Node4',2
UNION SELECT 6,'Node5',5
UNION SELECT 7,'Node6',5
UNION SELECT 8,'Node7',7
于 2013-05-26T14:01:01.733 に答える