1

私は次のような親子関係を持つdbテーブルを持っています:

ID         Name         ParentID
-------------------------------------
1         Computer          0
2         Software          1
3         Hardware          1
4         Windows           2
5         Games             0
6         Windows           5
7         Linux             5
8         3D                6
9         DirectX           8

このテーブルで「Windows」という単語を検索したいのですが、次のような結果が必要です。

ID         Name         ParentID
-------------------------------------
1         Computer          0          <== Grandparent of 4
2         Software          1          <== Parent of 4
4         Windows           2          <== 4
5         Games             0          <== Parent of 6
6         Windows           5          <== 6

つまり、検索語と関係のあるすべてのを保持し、残りはレコードから削除する必要があります

4

2 に答える 2

2

再帰CTEを使用できます

with C as 
(
  select T.ID, T.Name, T.ParentID
  from @T as T
  where Name = 'Windows'
  union all
  select T.ID, T.Name, T.ParentID
  from YourTable as T
    inner join C
      on T.ID = C.ParentID
)
select ID, Name, ParentID
from C
order by ID;

SEデータ

于 2012-07-23T06:17:29.180 に答える
1

HierarchyIdデータ型を使用してから、ofIsDescendantメソッドを使用します

SELECT * FROM Table
WHERE @searchId.IsDescendantOf(ID) = 1

これにより、任意の再帰やループを実行できます。それは速くて簡単です。

于 2012-07-22T23:27:13.770 に答える