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