Oracle支持层级结构的循环查询。我们可以将树形结构通过记录父子关系存储在关系表中。查询时使用connect by 语句可以选出某节点的所有子节点。
但是有时我们在项目中会遇到这种情况,即我们不需要取出所有的子节点,也许只需要取出它的下两层,或者三层。对于一层的情况,普通查询即可完成。
Oracle提供了level伪列来完成此项任务。
select user_id,level
from user
where level <= 2
start with user_id = 1278
connect by prior user_id = user_drtunder
order by level
这样就可以只查出两层的结构了
SQL> select empno,ename,mgr,level from emp start with mgr=7698 connect by prior mgr=empno;
EMPNO ENAME MGR LEVEL
---------- -------------------- ---------- ----------
7499 ALLEN 7698 1
7698 BLAKE 7839 2
7839 KING 3
7521 WARD 7698 1
7698 BLAKE 7839 2
7839 KING 3
7654 MARTIN 7698 1
7698 BLAKE 7839 2
7839 KING 3
7844 TURNER 7698 1
7698 BLAKE 7839 2
EMPNO ENAME MGR LEVEL
---------- -------------------- ---------- ----------
7839 KING 3
7900 JAMES 7698 1
7698 BLAKE 7839 2
7839 KING 3
已选择15行。
SQL> select empno,ename,mgr,level from emp where level<=2 start with mgr=7698 connect by prior mgr=empno;
EMPNO ENAME MGR LEVEL
---------- -------------------- ---------- ----------
7499 ALLEN 7698 1
7698 BLAKE 7839 2
7521 WARD 7698 1
7698 BLAKE 7839 2
7654 MARTIN 7698 1
7698 BLAKE 7839 2
7844 TURNER 7698 1
7698 BLAKE 7839 2
7900 JAMES 7698 1
7698 BLAKE 7839 2
已选择10行。
SQL>
SQL> select empno,ename,mgr,level from emp start with empno=7900 connect by prior mgr=empno;
EMPNO ENAME MGR LEVEL
---------- -------------------- ---------- ----------
7900 JAMES 7698 1
7698 BLAKE 7839 2
7839 KING 3
SQL> select empno,ename,mgr,level from emp where level<=2 start with empno=7900 connect by prior mgr=empno;
EMPNO ENAME MGR LEVEL
---------- -------------------- ---------- ----------
7900 JAMES 7698 1
7698 BLAKE 7839 2
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24799772/viewspace-677096/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24799772/viewspace-677096/