sql >> Database teknologi >  >> RDS >> Sqlserver

Hent rodforælder til underordnet i hierarkisk tabel

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

@TechDos svar antager, at det laveste ID vil være forælderen. Hvis du ikke ønsker at stole på dette, vil ovenstående forespørgsel sortere efter dybden.



  1. Udvidede arrangementer for SSAS

  2. Returner dataene fra rækkerne med den seneste dato for hvert enkelt kandidat_id

  3. Fordelene ved PostgreSQL

  4. Hvordan begrænser jeg antallet af rækker, der returneres af denne LEFT JOIN til én?