I can figure out how to get children from a cte, but can't figure how to get parents.
Here is sample code:
declare @Forums table(
IDINT,
NameNVARCHAR(50),
ParentINT
)
INSERT INTO @Forums SELECT 1, 'Root', null
INSERT INTO @Forums SELECT 2, 'lvl 1a', 1
INSERT INTO @Forums SELECT 3, 'lvl 1b', 1
INSERT INTO @Forums SELECT 4, 'lvl 2a', 2
INSERT INTO @Forums SELECT 5, 'lvl 2b', 2
INSERT INTO @Forums SELECT 6, 'lvl 3a', 4
INSERT INTO @Forums SELECT 7, 'lvl 3b', 4
--With CTE get children of ID=4,NAME=lvl 2a
--Output:ROOTIDID
--46
--47
;WITH CTE AS (
SELECT RootID = ID, ID
FROM @Forums
WHERE ID=4
UNION ALL
SELECT CTE.RootID, f.ID
FROM @Forums f
INNER JOIN CTE ON f.Parent = CTE.ID
)
SELECT RootID,ID FROM CTE WHERE ID<>4
--With CTE get parents of ID=4,NAME=lvl 2a
--Output:ROOTIDID
--42
--41