0
我有两个表如下查找顶级家长和递归CTE
Table Person
Id Name
1 A
2 B
3 C
4 D
5 E
Table RelationHierarchy
ParentId CHildId
2 1
3 2
4 3
这将形成树状结构
D
|
C
|
B
|
A
我使用下面的CTE找到顶级父
DECLARE @childID INT
SET @childID = 1 --chield to search
;WITH RCTE AS
(
SELECT *, 1 AS Lvl FROM RelationHierarchy
WHERE ChildID = @childID
UNION ALL
SELECT rh.*, Lvl+1 AS Lvl FROM dbo.RelationHierarchy rh
INNER JOIN RCTE rc ON rh.CHildId = rc.ParentId
)
SELECT TOP 1 id, Name
FROM RCTE r
inner JOIN dbo.Person p ON p.id = r.ParentId
ORDER BY lvl DESC
现在的问题是,因为人是他自己的顶层,那么他的身份证应该返回,而不是没有记录秒。我是否需要临时表或表变量来检查CTE的计数,然后在计数为零时返回 @childID?
我添加了sql-server标记,因为代码看起来像SQL Server代码。 –
看来你需要将顶层添加到关系层次表(即parentID = childID) – Jayvee
正如@Jayvee提到的,我相信你错过了'ParentId NULL和ChildId 4'的记录。这应该是你在RCTE的主播。 – NickyvV