对于表存在层次关系的查询中,可从树根搜索到树叶,也可从分枝搜索到树根。

✿ 问题的提出

Oracle系统提供CONNECT BYPRIOR实现层次的搜索,它可从树根搜索到树叶,也可从分枝搜索到树根。那么如何实现从某个分枝开始搜索到树根呢?

✿ 实现技术

要实现从分枝搜索到树根,需要调整连接的等价条件。Oracle的CONNECT BY后的PRIOR子句非常关键,PRIOR表示上一条记录。

✿ 实现步骤

现在要从某个雇员往他的上级列出该雇员的层次结构(从底到顶),可从树枝为:START WITH mgr=778开始,往树根搜索:

SQL> --下面语句从某个树枝开始搜索 :
SQL> col ename for a30
SQL> select lpad(' ',4*(level-1))||ename ename,mgr,empno from emp
start with mgr=7788  connect by prior mgr= empno ;

ENAME                       MGR   EMPNO
------------------------------           -----    ---------
ADAMS                       7788      7876
    SCOTT                    7566      7788
        JONES                7839      7566
            KING                       7839

✿ 说明

从树枝向树根方向搜索,采用connect by prior mgr= empno,与上一个例子刚好相反。