对于树形查询中的PRIOR操作,一般都是用在CONNECT BY语句中,而这个PRIOR操作其实在SELECT的字段列表中也是可以使用的。
看一个简单的例子:
SQL> create table t (id number, parent_id number, name varchar2(30));
Table created.
SQL> insert into t values (1, null, 'a');
1 row created.
SQL> insert into t values (2, 1, 'b');
1 row created.
SQL> insert into t values (3, 1, 'c');
1 row created.
SQL> insert into t values (4, 2, 'd');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t;
ID PARENT_ID NAME
---------- ---------- ---------------
1 a
2 1 b
3 1 c
4 2 d
SQL> select id, parent_id, name
2 from t
3 start with id = 1
4 connect by prior id = parent_id;
ID PARENT_ID NAME
---------- ---------- ---------------
1 a
2 1 b
4 2 d
3 1 c
这是树形查询中最长使用PRIOR操作的情况,在CONNECT BY语句中使用。
不过PRIOR还可以用在SELECT列表中:
SQL> select id, parent_id, prior id p_id, name, prior name p_name
2 from t
3 start with id = 1
4 connect by prior id = parent_id;
ID PARENT_ID P_ID NAME P_NAME
---------- ---------- ---------- --------------- ---------------
1 a
2 1 1 b a
4 2 2 d b
3 1 1 c a
除了普通的列,PRIOR甚至还可以用于SYS_CONNECT_BY_PATH函数:
SQL> select
2 id,
3 parent_id,
4 prior id p_id,
5 sys_connect_by_path(name, '/') name,
6 prior sys_connect_by_path(name, '/') p_name
7 from t
8 start with id = 1
9 connect by prior id = parent_id;
ID PARENT_ID P_ID NAME P_NAME
---------- ---------- ---------- --------------- ---------------
1 /a
2 1 1 /a/b /a
4 2 2 /a/b/d /a/b
3 1 1 /a/c /a
利用这个功能,可以使得树形查询实现很多更灵活的功能。
总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089
中国UNIX用户协会 Copyright 2010 ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号 京公网安备110108006275号