with AllParents (child_id,parent_id,groupTreeId,cycleMark,path) as (select
g1_0.CHILD_ID,g1_0.PARENT_ID,g1_0.id,0,(char(0)+coalesce(cast(g1_0.id as varchar(max)),char(0))+char(0)+char(0))
from
GROUP_TREE_TABLE g1_0
join
GROUP_TABLE c1_0
on c1_0.id=g1_0.CHILD_ID
where
c1_0.id=?
union
all select
g2_0.CHILD_ID,g2_0.PARENT_ID,g2_0.id,case
when cte1_0.path like ('%'+char(0)+coalesce(cast(g2_0.id as varchar(max)),char(0))+char(0)+char(0)+'%') then 1
else 0
end,(cte1_0.path+char(0)+coalesce(cast(g2_0.id as varchar(max)),char(0))+char(0)+char(0))
from
AllParents cte1_0
join
GROUP_TREE_TABLE g2_0
on cte1_0.parent_id=g2_0.CHILD_ID
where
cte1_0.cycleMark=0) select
child1_0.id,
child1_0.NAME,
parent2_0.id,
parent2_0.NAME,
ap1_0.groupTreeId,
ap1_0.cycleMark
from
AllParents ap1_0
join
GROUP_TABLE child1_0
on ap1_0.child_id=child1_0.id
join
GROUP_TABLE parent2_0
on ap1_0.parent_id=parent2_0.id