Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Holen Sie sich das Root-Elternteil des Kindes in der hierarchischen Tabelle

DECLARE @id INT = 6
;WITH parent AS
(
    SELECT id, parentId, 1 AS [level] from tbl WHERE id = @id
    UNION ALL 
    SELECT t.id, t.parentId, [level] + 1 FROM parent
    INNER JOIN tbl t ON t.id =  parent.parentid
)
SELECT TOP 1 id FROM parent ORDER BY [level] DESC

Die Antwort von @ TechDo geht davon aus, dass die niedrigste ID die übergeordnete ist. Wenn Sie sich nicht darauf verlassen möchten, sortiert die obige Abfrage nach der Tiefe.