首先,我假设这是一个有向图。如果无向图包含单个边,则其周期很短。
递归CTE唯一棘手的部分是在遇到周期时停止-因此您不会得到无限递归。
试试这个:
with cte as (
select e.object_a, e.object_b, iscycle = 0
from edges e
union all
select cte.object_a, e.object_b,
(case when cte.object_a = e.object_b then 1 else 0 end) as iscycle
from cte join
edges e
on cte.object_b = e.object_a
where iscycle = 0
)
select max(iscycle)
from cte;