在查询列表中使用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

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

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-613052/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-613052/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值