【问题标题】:Why CONNECT_BY_ISCYCLE doesn't give 1 when table has a cycle?为什么当表有循环时 CONNECT_BY_ISCYCLE 不给出 1?
【发布时间】:2016-04-16 06:20:13
【问题描述】:

众所周知,Oracle 的scott.emp 表在层次结构中没有任何循环。 但是我将emp 表更改了一点(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。如果你能弄清楚,请回答原因。

【问题讨论】:

    标签: sql oracle hierarchical-query


    【解决方案1】:

    在层次结构中,Martin 和 Blake 都未曾接触过。由于起始条件,您已使它们相互关联,但不再位于您选择的任何链中。

    连接标准是prior emp = mgr,因此基于它们是相关的,但现在两者都没有链接到它们之上的任何其他人。它们形成了自己的小岛,而那个岛与mgr IS NULL 开始条件不匹配。或者,如果您愿意,如果您从 mgr null 的任何记录开始,则没有通往这些记录的路径。

    如果您删除了开始条件,您会看到更多您不想要的数据,但这将包括 Martin 和 Blake,并会为他们显示循环标志。

    【讨论】:

    • 非常感谢 Alex...Martin 和 Blake 根本不在 Tree... 对吧?
    • 对,因为你定义了mgr is null的根。
    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 2018-08-21
    • 2021-10-28
    • 1970-01-01
    相关资源
    最近更新 更多