您在这里:首页 > 学员专区 > 技术文章
Oracle视频
Oracle
CUUG课程

在查询列表中使用PRIOR操作

 

对于树形查询中的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

利用这个功能,可以使得树形查询实现很多更灵活的功能。

相关文章 [上一篇] 函数调用发生在SQL调用之前还是过程中
010-88589926(88587026)
CUUG热门培训课程
Oracle DBA就业培训
CUUG名师
网络课程
技术沙龙
最新动态

总机:(010)-88589926,88589826,88587026 QQ讨论群:243729577 182441349 邮箱:cuug_bj@cuug.com
通信地址:北京市海淀区紫竹院路98号北京化工大学科技园609室(CUUG)邮政编码:100089 
中国UNIX用户协会 Copyright 2010  ALL Rights Reserved 北京神脑资讯技术有限公司
京ICP备11008061号  京公网安备110108006275号