Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Заявка за връзка между родител и дете на най-високо ниво

Тъй като Permission is NOT NULL трябва да бъде в йерархията, тогава този ред става основният възел за този случай. Означих това RootID тук

Добавени са още примерни данни за показване на множество клонове от един и същ ParentID = 0 root

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Състояние на опашката за процес на SQL Server

  2. Защо разделените с точка префикси се игнорират в списъка с колони за оператори INSERT?

  3. sql server 2008 management studio не проверява синтаксиса на моята заявка

  4. Пребройте броя на дните on_hire през JAN

  5. Преобразуване на ‘time’ в ‘smalldatetime’ в SQL Server (T-SQL примери)