2016-06-13 3 views
0

私はこのような階層構造を持つテーブルがある:いくつかのノードのすべての子をツリー構造で取得する方法はありますか?

Create Table tbl1 
(
    AccountID NVARCHAR(100), 
    ID int, 
    ParentID int 
); 

INSERT INTO tbl1 
VALUES ('11', 1, Null), ('12', 2, Null), ('13', 3, Null), 
     ('11/11', 4, 1), ('11/12', 5, 1), ('11/111', 6, 1), 
     ('11/11/001', 7, 4), ('11/11/002', 8, 4), ('12/111', 9, 2), 
     ('12/112', 10, 2); 

このような他のテーブル(FilteringTbl)によると、ツリー構造でTBL1からいくつかのノードのすべての子を取得する方法:

AccountID 
--------- 
11/11 
12 
13 

つまり、SQL Server 2008の最初のテーブル(tbl1)からノード11/11と12と13のすべての子を取得するSQLクエリを作成したいとします。 メインテーブルには5,000を超えるレコードがあります。 (tbl1 5400レコードとフィルタリング1500レコード)

私を助けてください。ありがとう。

答えて

1
;with C 
as (
    select AccountID, 
      ID, 
      ParentID, 
      0 as [level] 
    from tbl1 
    where ID IN (SELECT ID FROM Filteringtbl) 
    union all 
    select I.AccountID, 
      I.ID, 
      I.ParentID, 
      C.[level] + 1 as [level] 
    from tbl1 as I 
      inner join C on 
       C.ID = I.ParentID 
) 
select * 
from C 
+0

私のテーブルには5000以上のレコードがあるため、私の問題には適切ではありません。 –

+0

すべての5000レコードまたは指定したIDを表示しますか?正確な要件をコメントできますか? –

+0

filteringtbl(tbl1 5400レコードおよびfilteringtbl 1500レコード)に従ってtbl1をフィルタリングしたいとします。ありがとう –

関連する問題