sql >> Database >  >> RDS >> Sqlserver

Hoe u de volledige hiërarchie kunt krijgen met SQL CTE

DECLARE @tmp TABLE(ID INT,ParentID INT,NAME VARCHAR(10),DEPTH INT)

INSERT INTO @tmp VALUES
(1      ,NULL            ,'A'             ,1 ),
(2      ,NULL            ,'B'             ,1 ),
(3      ,NULL            ,'C'             ,1 ),
(4      ,1               ,'D'             ,2 ),
(5      ,4               ,'E'            ,3 ),
(6      ,5               ,'F'            ,4 );

select * from @tmp

;WITH cte AS
(
    SELECT   A.ID
            ,A.ParentID
            ,A.NAME
            ,A.DEPTH
    FROM    @tmp A

    UNION ALL

    SELECT   A.ID
            ,B.ParentID
            ,A.NAME
            ,A.DEPTH 
    FROM    cte A 
    INNER JOIN @tmp B on A.ParentID = B.ID 
    WHERE   B.ParentID IS NOT NULL

)

SELECT * FROM cte


  1. Toegang geweigerd met de juiste inloggegevens, wat is er aan de hand?

  2. psql-retourcode als nul rijen gevonden

  3. Bepaal of een transactie actief is (Postgres)

  4. MySQL:fout 150 bij gebruik van ON UPDATE SET NULL en ON DELETE SET NULL, waarom?