SQL Server 2005 recursive query with loops in data - is it possible?

前端 未结 10 1827
野趣味
野趣味 2020-12-06 03:29

I\'ve got a standard boss/subordinate employee table. I need to select a boss (specified by ID) and all his subordinates (and their subrodinates, etc). Unfortunately the rea

10条回答
  •  萌比男神i
    2020-12-06 04:08

    this will work for the initial recursive link, but might not work for longer links

    DECLARE @Table TABLE(
            ID INT,
            PARENTID INT
    )
    
    INSERT INTO @Table (ID,PARENTID) SELECT 1, 2
    
    INSERT INTO @Table (ID,PARENTID) SELECT 2, 1
    
    INSERT INTO @Table (ID,PARENTID) SELECT 3, 1
    
    INSERT INTO @Table (ID,PARENTID) SELECT 4, 3
    
    INSERT INTO @Table (ID,PARENTID) SELECT 5, 2
    
    
    SELECT * FROM @Table
    
    DECLARE @ID INT
    
    SELECT @ID = 1
    
    ;WITH boss (ID,PARENTID) AS (
        SELECT  ID,
                PARENTID
        FROM    @Table
        WHERE   PARENTID = @ID
    ),
     bossChild (ID,PARENTID) AS (
        SELECT  ID,
                PARENTID
        FROM    boss
        UNION ALL
        SELECT  t.ID,
                t.PARENTID
        FROM    @Table t INNER JOIN
                bossChild b ON t.PARENTID = b.ID
        WHERE   t.ID NOT IN (SELECT PARENTID FROM boss)
    )
    SELECT  *
    FROM    bossChild
    OPTION (MAXRECURSION 0)
    

    what i would recomend is to use a while loop, and only insert links into temp table if the id does not already exist, thus removing endless loops.

提交回复
热议问题