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

Как да създадете SQL Server 2005 CTE за връщане на записи родител-дете, за деца с множество родители

Това изглежда работи добре за мен, след като коригирах синтактичната грешка във вашия CTE:

create table #ParentChildTable 
(nodeID int not null
,parentNodeID int not null
)

insert #ParentChildTable 
select 900,56
union all select 900,123
union all select 123,439
union all select 56,439
union all select 439,0

;WITH Heirarchy
AS
(
    SELECT 
        T1.NodeID,
          T1.ParentNodeID
    FROM
        #ParentChildTable T1
    WHERE
        T1.NodeID = 439

    UNION ALL
    SELECT 
        T1.NodeID,
        T1.ParentNodeID
    FROM
        #ParentChildTable T1
        INNER JOIN Heirarchy TH ON TH.NodeID = T1.ParentNodeID
)
select *
from Heirarchy

Връща резултата:

NodeID      ParentNodeID
----------- ------------
439         0
123         439
56          439
900         56
900         123


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. пълнотекстово търсене върху данни с долна черта

  2. Препоръчителни процесори Intel за SQL Server 2014 – март 2015 г

  3. Функция SQL group_concat в SQL Server

  4. Използвайте OBJECTPROPERTY(), за да разберете дали дадена таблица е системна таблица в SQL Server

  5. как да направя връзка с външен ключ върху физически разпределени данни?