By using db<>fiddle, you agree to license everything you submit by Creative Commons CC0.
with t as (
select v.*
from (values (229, null), (230, 229), (231, 229), (232, 229), (233, 229),
(300, NULL), (301, 300), (302, 301), (303, 300 )
) v(id, parentid)
),
cte as (
select id as ultimate_parent_id, id as relatedid
from t
where parentid is null
union all
select cte.ultimate_parent_id, t.id
from cte join
t
on cte.relatedid = t.parentid
)
select relatedid
from cte
where ultimate_parent_id = (select ultimate_parent_id from cte where relatedid = 231)
relatedid |
---|
229 |
230 |
231 |
232 |
233 |