我有一个零件和子零件表,其中每条记录包含该记录的主要部分及其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
同时用于A
和Q
。
如何使用连接而不使用SQL游标或循环有效地显示给定父部件的所有子部件?理论上,分层树可以无限深。
答案 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