查找分层树的顶级

时间:2017-05-15 14:06:40

标签: oracle hierarchical-data

我需要找到层次结构的顶层..(最高级别)

基本上我有这张表:

CREATE TABLE HIERARCHY_TREE
(
  ID            NUMBER(38),
  FEEDER        VARCHAR2(20 BYTE),
  NAME          VARCHAR2(68 BYTE),
  PARENT        NUMBER(38)
)

情节是我可能有一个 FEEDER (父母),其中N NAME (孩子)......我也可能拥有<兄弟“< strong> NAME ,但所有人都使用相同的 FEEDER 。因此,对于给定的 FEEDER ,我有这种层次结构。

LEVEL   ID          PARENT          FEEDER          NAME              ELEMENT_ABOVE
1       6589                        ITI02           ITI02
2       12242       6589            ITI02           AE23              ITI02
3       12330       12242           ITI02           KD01              AE23
4       12355       12330           ITI02           LOD44             KD01
4       1583285     12330           ITI02           US821             KD01
5       12796       1583285         ITI02           MBADE1233         US821
6       12792       12796           ITI02           LIIIK911          MBADE1233
6       12792       12796           ITI02           MMQQWWE1234       MBADE1233
5       12879       1583285         ITI02           PE33321           US821
5       13043       1583285         ITI02           TP120120          US821
6       1937994     13043           ITI02           KDKKD102102       MBADE1233
7       10424       1937994         ITI02           QIEI124           KDKKD102102
7       13047       1937994         ITI02           KDII123123        KDKKD102102

我使用以下查询执行此操作:

SELECT LEVEL lev,
       id,
       PARENT,
       FEEDER,
       t.name,
       PRIOR t.NAME AS element_above,
       FROM HIERARCHY_TREE t
         WHERE FEEDER = :feeder
    CONNECT BY PRIOR t.ID = t.PARENT
            START WITH t.PARENT IS NULL AND t.FEEDER = :feeder

这适用于现有馈线的99%。但是对于少数人来说,我有一个无限循环,我无法确定问题...所以我有一些问题:

  • 这是最好的方法吗?如果没有,如何改进呢?
  • 有没有办法识别可能的无限循环?

提前致谢

0 个答案:

没有答案