sql >> Database >  >> RDS >> Sqlserver

Vraag naar ouder-kindrelatie naar het hoogste niveau

Omdat Permission is NOT NULL moet in de hiërarchie staan, dan wordt deze rij het hoofdknooppunt voor dit geval. Ik heb deze RootID gelabeld hier

Ook meer voorbeeldgegevens toegevoegd om meerdere takken van dezelfde ParentID = 0 te tonen wortel

DECLARE @t TABLE (NodeId int, NodeName varchar(100), ParentId int, Permission int)
INSERT @t VALUES 
(1,'Node1',0,NULL),
(2,'Node2',1,1),
(3,'Node3',1,NULL),
(4,'Node4',1,NULL),
(5,'Node5',2,NULL),
(6,'Node6',5,NULL),
(7,'Node7',2,NULL),
(8,'Node1',0,NULL),
(9,'Node9',8,2),
(10,'Node10',9,NULL),
(11,'Node11',10,NULL),
(12,'Node12',11,NULL),
(13,'Node13',10,NULL),
(14,'Node14',9,NULL);

WITH CTE AS
(
    SELECT NodeId, NodeName, ParentId AS RootID FROM @t WHERE Permission IS NOT NULL
    UNION ALL
    SELECT T.NodeId, T.NodeName, CTE.RootID
    FROM @t T JOIN CTE ON T.ParentId = CTE.NodeId
)
SELECT
    *
FROM
    CTE
WHERE
    NodeName IN ('Node6', 'Node13');



  1. Wat is SQL Server Deadlock?

  2. Door de resultatenset bladeren

  3. Python MySQL ReferenceError:object waarnaar zwak wordt verwezen bestaat niet meer

  4. Nummers verwijderen van string sql-server