当所有子项都在同一行和表中时,如何获取父项的所有子项

时间:2016-02-08 14:45:33

标签: sql sql-server join

我有一个零件和子零件表,其中每条记录包含该记录的主要部分及其ChildPart。

Part - ChildPart
A    -    B
A    -    C
A    -    D
C    -    F
C    -    Z
F    -    R
Z    -    R
Q    -    B
Q    -    C

因此,对于上面的示例,部分A共有7个后代(B, C, D, F, Z, R, R)。父部件可以有多个子部件,子部件可以属于多个父部件;请注意,部分B同时用于AQ

如何使用连接而不使用SQL游标或循环有效地显示给定父部件的所有子部件?理论上,分层树可以无限深。

1 个答案:

答案 0 :(得分:2)

您可以使用Recursive CTE

DECLARE @pID VARCHAR(20) = 'A'

;WITH CTE AS (
   SELECT ChildPart
   FROM mytable
   WHERE Part = @pID

   UNION ALL

   SELECT t1.ChildPart
   FROM mytable AS t1
   INNER JOIN CTE AS t2 ON t1.Part = t2.ChildPart
)
SELECT ChildPart
FROM CTE