在查詢列表中使用PRIOR操作

yangtingkun發表於2009-08-23

對於樹形查詢中的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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章