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

Vælg erklæring for at returnere forældre og uendelige børn

Så med henvisning til dette svar:

SQL Server CTE Overordnet Child rekursiv

Her er en fungerende version med dit skema:

Table Creation Script

CREATE TABLE YOUR_TABLE
    ([ID] int, [ParentID] int, [Name] varchar(21))
;
    
INSERT INTO YOUR_TABLE
    ([ID], [ParentID], [Name])
VALUES
    (1, NULL, 'A root'),
    (2, NULL, 'Another root'),
    (3, 1, 'Child of 1'),
    (4, 3, 'Grandchild of 1'),
    (5, 4, 'Great grandchild of 1'),
    (6, 1, 'Child of 1'),
    (7, NULL, 'Another root'),
    (8, 7, 'Child of 6')
;

Rekursiv CTE

DECLARE @ID INT = 1

;WITH ParentChildCTE
AS (
    SELECT ID, ParentId, Name        
    FROM YOUR_TABLE
    WHERE Id = @ID

    UNION ALL

    SELECT T1.ID, T1.ParentId, T1.Name        
    FROM YOUR_TABLE T1
    INNER JOIN ParentChildCTE T ON T.ID = T1.ParentID
    WHERE T1.ParentID IS NOT NULL
    )
SELECT *
FROM ParentChildCTE

Nøgledelen er i CTE oprettelse hvor UNION ALL slutter sig tilbage til resultatsættet og tilslutter sig ID til ParentId , hvilket ikke begrænser antallet af niveauer.



  1. Hvordan kan jeg få en almindelig tekst postgres database dump på heroku?

  2. Tæl alle objekter i din database

  3. Hvordan får man optællingen af ​​nuværende måneds søndage i psql?

  4. PostgreSQL-opdateringer med flere rækker i Node.js