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
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.