为什么 CONNECT_BY_ISCYCLE 有循环时 CONNECT_BY_ISCYCLE 不给 1?
Why CONNECT_BY_ISCYCLE doesn't give 1 when table has a cycle?
众所周知scott.emp
table Oracle 的层次结构没有任何循环。
但我稍微更改了 emp
table (UPDATE emp SET mgr=7654 WHERE empno=7698)
,其中我将 Martin 的经理更改为 Blake,将 Blake 的经理更改为 Martin,并在查询后解雇。
SELECT
empno,
ename,
mgr,
level,
connect_by_iscycle
FROM emp
START WITH mgr IS NULL
CONNECT BY NOCYCLE prior empno=mgr
ORDER SIBLINGS BY mgr
但它没有给出 Martin 和 Blake 相关条目,也没有在预期字段中显示 1。知道的请回答原因
Martin 和 Blake 都没有进入等级制度。您已经使它们相互关联,但由于开始条件的原因,它们不再位于您选择的任何链中。
连接标准是 prior emp = mgr
所以基于它们是相关的,但现在都没有链接到它们之上的任何其他人。他们组成了自己的小岛,而那个小岛不符合 mgr IS NULL
开始条件。或者,如果您愿意,如果您从 mgr
为 的任何记录开始,则没有通往这些记录的路径。
如果您删除了开始条件,您会看到更多您不想要的数据,但这将包括 Martin 和 Blake,并且会显示他们的循环标志。
众所周知scott.emp
table Oracle 的层次结构没有任何循环。
但我稍微更改了 emp
table (UPDATE emp SET mgr=7654 WHERE empno=7698)
,其中我将 Martin 的经理更改为 Blake,将 Blake 的经理更改为 Martin,并在查询后解雇。
SELECT
empno,
ename,
mgr,
level,
connect_by_iscycle
FROM emp
START WITH mgr IS NULL
CONNECT BY NOCYCLE prior empno=mgr
ORDER SIBLINGS BY mgr
但它没有给出 Martin 和 Blake 相关条目,也没有在预期字段中显示 1。知道的请回答原因
Martin 和 Blake 都没有进入等级制度。您已经使它们相互关联,但由于开始条件的原因,它们不再位于您选择的任何链中。
连接标准是 prior emp = mgr
所以基于它们是相关的,但现在都没有链接到它们之上的任何其他人。他们组成了自己的小岛,而那个小岛不符合 mgr IS NULL
开始条件。或者,如果您愿意,如果您从 mgr
为 的任何记录开始,则没有通往这些记录的路径。
如果您删除了开始条件,您会看到更多您不想要的数据,但这将包括 Martin 和 Blake,并且会显示他们的循环标志。