1

次の列を持つテーブルがあります-

  1. ID(デバイスのID)
  2. DeviceName(デバイスの名前)
  3. ParentID(親デバイスのID)

表によると、私のデータはツリー構造に保存されます。つまり、1つのデバイスに他の複数のデバイスが含まれ、そのデバイスにも複数のデバイスが含まれます。

私が必要としているのは、指定されたデバイスIDの下にあるすべてのデバイスのIDを取得することです。親ノードの下にあるすべての子ノード(それ自体の子ノードを含む)を取得するには、適切なSQLクエリが必要です。

例:Aが子B1、B2を持つ最上位ノードであるとしましょう。

B1にはC1、C2の子が含まれ、B2にはC3、C4が含まれます。

ここでも、C1にはD1、D2....などが含まれています。

私が必要としているのは、Aが提供されている場合、すべてのB1、B2、C1、C2、C3、C4、D1、D2、....を取得することです。

時間を共有していただきありがとうございます。

4

1 に答える 1

6

これには再帰CTEを使用する必要があります。

;WITH r as (
     SELECT ID
     FROM DevicesTable
     WHERE ParentID = @someID

     UNION ALL

     SELECT d.ID 
     FROM DevicesTable d
        INNER JOIN r 
           ON d.ParentID = r.ID
)
SELECT ID
FROM r
于 2012-07-11T15:18:20.250 に答える