sql >> Databáze >  >> RDS >> Sqlserver

Vyberte příkaz pro návrat nadřazeného a nekonečného potomka

Takže s odkazem na tuto odpověď:

Rekurzivní SQL Server CTE Parent Child

Zde je pracovní verze s vaším schématem:

Skript pro vytvoření tabulky

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

Rekurzivní 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

Klíčová část je v CTE vytvoření, kde je UNION ALL se připojí zpět k sadě výsledků a připojí ID na ParentId , což neomezuje počet úrovní.



  1. Jak zkontrolovat úroveň kompatibility databáze v SQL Server pomocí T-SQL

  2. Jak získat hodnoty, které neobsahují čísla v MariaDB

  3. aktualizace a komprimace databáze sqlite v systému Android

  4. Příkaz SQL ignoruje parametr where