对于表存在层次关系的查询中,可从树根搜索到树叶,也可从分枝搜索到树根。
✿ 问题的提出
Oracle系统提供CONNECT BY
与PRIOR
实现层次的搜索,它可从树根搜索到树叶,也可从分枝搜索到树根。那么如何实现从某个分枝开始搜索到树根呢?
✿ 实现技术
要实现从分枝搜索到树根,需要调整连接的等价条件。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
,与上一个例子刚好相反。