Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak utworzyć SQL Server 2005 CTE, aby zwrócić rekordy rodzic-dziecko, dla dzieci z wieloma rodzicami?

Wygląda na to, że działa to dobrze dla mnie, gdy poprawiłem błąd składni w twoim 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

Zwraca wynik:

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. Czy mogę połączyć się z serwerem SQL znajdującym się poza moją siecią?

  2. Zaktualizuj podciąg kolumny

  3. Dlaczego CTE (Common Table Expressions) w niektórych przypadkach spowalnia zapytania w porównaniu do tabel tymczasowych w SQL Server

  4. Nie wyświetlaj pustych zestawów zwrotów

  5. Fizyczna lokalizacja danych FILESTREAM