sql >> Databasteknik >  >> RDS >> Sqlserver

Välj uttalande för att returnera förälder och oändliga barn

Så hänvisar till det här svaret:

SQL Server CTE Parent Child rekursiv

Här är en fungerande version med ditt schema:

Skript för att skapa tabell

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

Nyckeldelen finns i CTE skapande där UNION ALL går tillbaka till resultatuppsättningen och går med i ID till ParentId , vilket inte begränsar antalet nivåer.



  1. Hybrid Cloud PostgreSQL-distributionstips

  2. sqlite rad-ID matchar inte listvy - ANDROID

  3. Frågor och svar från vår Parameter Sniffing-webinarserie

  4. Hur man väljer och sorterar efter kolumner som inte finns i Groupy By SQL-sats - Oracle