【发布时间】:2020-04-01 19:34:56
【问题描述】:
我似乎无法在此查询中找到无限循环背后的原因,也不知道如何纠正它。
这里是上下文: 我有一个名为 mergesWith 的表,其描述如下: mergesWith:有关邻近海域的信息。请注意,在这种关系中,对于每一对 相邻的海洋(A,B),只给出一个元组——因此,关系不是对称的。 sea1:一片海 sea2:大海。
我想通过导航了解从地中海可到达的每一个海洋。我选择了使用“with”的递归查询:
With
acces(p,d) as (
select sea1 as p, sea2 as d
from MERGESWITH
UNION ALL
select a.p, case when mw.sea1=a.d
then mw.sea2
else mw.sea1
end as d
from acces a, MERGESWITH mw
where a.d=mw.sea1 or a.d=mw.sea2)
select d
from acces
where p= 'Mediterranean Sea';
我认为原因是 case when 或 a.d=mw.sea1 or a.d=mw.sea2 限制不够,但我似乎无法确定原因。
我收到此错误消息: 32044。 00000 - “执行递归 WITH 查询时检测到循环” *原因:递归 WITH 子句查询产生了一个循环并被停止 为了避免无限循环。 *Action:重写递归 WITH 查询以停止递归或使用 CYCLE 子句。
【问题讨论】:
-
几乎不可能在没有看到示例数据的情况下为您提供解决方案。
标签: sql oracle recursion with-statement hierarchical-query