2017-11-29 49 views
1

上位ノードが1つある親子フォーマットの階層データを格納するテーブルがあります。複数のレベル、および複数の子を持つ各親。特定のノードから最後の子までの親子行のみを選択する再帰的なクエリを作成するにはどうすればよいですか?親子階層の再帰的クエリ。上位ノードから子孫を取得

例テーブル

Parent|child 
1  |2 
1  |3 
2  |4 
2  |5 
3  |6 
3  |7 
6  |8 

はどのようにしてノード3からの行とそのすべての子孫のみを取り出すことができますか?

+0

の子孫である子の関係をあなたが持っている問題を指定してください。 –

+0

どの[DBMS](https://en.wikipedia.org/wiki/DBMS)製品を使用していますか? Postgres?オラクル? 「SQL」はクエリ言語であり、特定のデータベース製品の名前ではありません。 –

答えて

3

DBMSがSQL Serverの場合、再帰を使用してCommon Table Expressions(CTE)を使用してこれを実行できます。私はこれがすべてのバージョン2008R2以上で動作すると信じています。以下のクエリはあなたにすべての親与えるだろう - 3

CREATE TABLE dbo.ParentChildRel 
(
    Parent INT 
    ,Child INT 
) 

INSERT INTO dbo.ParentChildRel 
VALUES (1,2) 
     ,(1,3) 
     ,(2,4) 
     ,(2,5) 
     ,(3,6) 
     ,(3,7) 
     ,(6,8) 
     ,(7,10) 

;WITH Hierarchy AS 
    (
     SELECT Parent 
       ,Child 
     FROM dbo.ParentChildRel 
     WHERE Parent = 3 
     UNION ALL 
     SELECT rel.Parent 
       ,rel.Child 
     FROM Hierarchy hier 
      INNER JOIN dbo.ParentChildRel rel ON hier.Child = rel.Parent 
    ) 
SELECT * 
FROM Hierarchy 

結果

Parent Child 
3  6 
3  7 
7  10 
6  8 
+0

これはSQL Serverに固有のものではありません。 –

関連する問題