sql >> Database >  >> RDS >> Sqlserver

Select-instructie om ouder en oneindige kinderen te retourneren

Dus verwijzend naar dit antwoord:

SQL Server CTE Parent Child recursief

Hier is een werkende versie met uw schema:

Script voor het maken van tabellen

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')
;

Recursieve 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

Het belangrijkste onderdeel zit in de CTE creatie waar de UNION ALL voegt zich weer bij de resultatenset en voegt zich bij ID naar ParentId , die het aantal niveaus niet beperkt.



  1. Hoe loop ik door een MySQL-query via PDO in PHP?

  2. Hoe installeer ik sqlcmd &bcp op SUSE

  3. Laravel 5.4 op PHP 7.0:PDO-uitzondering - Kan stuurprogramma niet vinden (MySQL)

  4. Hoeveel gebruikers hebben toegang tot ondersteuning?