【问题标题】:Hierarchical Query CONNECT BY Oracle分层查询 CONNECT BY Oracle
【发布时间】:2015-02-13 14:32:54
【问题描述】:

我正在尝试在 oracle 中实现 Connect By 查询。试图了解它是如何工作的。所以我有一张简单的桌子 看起来像:

empno ename mno
1      KS    null
2      AB     2
3      BC     1
4      TR     3
5      QE     2
6      PL     3
7      LK     6

查询

SELECT empno, ename, mno
   FROM test
START WITH ename = 'LK'
   CONNECT BY PRIOR empno = mno;

因此,当名称为 LK 时,我应该得到以下父/子行 LK>PL>BC>KS。 SQLFIDDLE 但我没有得到正确的结果。我做错了什么?

【问题讨论】:

    标签: oracle hierarchical


    【解决方案1】:

    不,你不应该。

    LK 的父母是 PL。 PL的父母是BC。 BC的父母是KS。 KS 没有父母。当您尝试从 LK 启动树时,您会得到它的所有子节点 - 没有,因为没有 mno = 7 的记录。

    您在查询中混淆了父子顺序。如果你想从叶子到根展开三个,你应该问

    SELECT empno, ename, mno
       FROM test
    START WITH ename = 'LK'
       CONNECT BY empno = PRIOR mno;
    

    如果你想看树成自然秩序,你应该问

    SELECT empno, ename, mno
       FROM test
    START WITH mno is null
       CONNECT BY PRIOR empno = mno;
    

    【讨论】:

      猜你喜欢
      • 2023-03-07
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多