dairesel bir referans bulunan (ya da daha fazla anne olduğu yerde) ve bir göstergesi dairesel bir referans olduğunu Çocuğun hiyerarşisinde bulunmuş olup olmadığını göstermek için:
with cte as
(select t.Child Original_Child,
t.Parent,
t.Child,
'|' + convert(varchar(max),t.Parent) + '|' + convert(varchar(max),t.child) + '|' hierarchy_list,
convert(int,case Parent when Child then 1 else 0 end) circular_ind
from DataTable t
union all
select c.Original_Child,
t.Parent,
t.Child,
coalesce('|' + convert(varchar(max),t.Parent),'') + c.hierarchy_list hierarchy_list,
convert(int,
sign(charindex('|' + convert(varchar(max),t.parent) + '|',c.hierarchy_list))
) circular_ind
from cte c
join DataTable t on t.Child = c.Parent
where c.circular_ind=0),
cte_final as
(select c.*,
row_number() over (partition by original_child
order by len(hierarchy_list) desc) rn from cte c)
select * from cte_final
where rn=1
option (maxrecursion 0)
kullandığınız ve SQL zaten soruya çalıştı (vb SQLSunucusu, Oracle, Postgres) RDBMS hangi ekleyebilir miyim? –
Postgres'te "ziyaret edilen" öğeleri bir dizide toplayabilir ve diziyi, CTE –
MS SQL Server 2008 R2 kullanıyorum. Lütfen bana sorguyu verebilir misiniz? – SChowdhury