oracle 中start with 的用法 .

来源:互联网 发布:mac的ps怎么导入字体 编辑:程序博客网 时间:2024/06/04 18:21

oracle 提供了start with connect by 语法结构可以实现递归查询。

1. 一个简单举例:
SQL> select *  from test;

BILL_MONTH           DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803                        1 13800
200803                        3 13800
200803                        2 13800
200803                        2 13801
200803                        4 13804
200803                        5 13804
200803                        7 13804
200803                        8 13804
200803                        6 13802
200803                        6 13801
200803                        7 13801
200803                        8 13801

12 rows selected

SQL>
SQL> select * from test
  2       start with day_number=1
  3       connect by  prior day_number=day_number-1 and prior msisdn= msisdn
  4      ;

BILL_MONTH           DAY_NUMBER MSISDN
-------------------- ---------- --------------------
200803                        1 13800
200803                        2 13800
200803                        3 13800

SQL>


上面的语句查找出了从1开始,并且day_number 逐渐+1 递增的,并且 msisdn 相同的哪些个数据.


2. start with  connect by 语法结构
 如上面说看到的 例子, 其语法结构为  start with condition  connect by  condition (含 prior 关键字)
start with conditon 给出的seed 数据的范围, connect by  后面给出了递归查询的条件,prior 关键字表示父数据,prior 条件表示子数据需要满足父数据的什么条件。

在下面的这个start with connect by 结构中,就表示 查找出了从1开始,父数据的day_number等于子数据的day_number-1而且父数据的msisdn=子数据的msisdn.

start with day_number=1
     connect by  prior day_number=day_number-1 and prior msisdn= msisdn


像这个sql意思就是:查询表l_mas1里面 START WITH 从id=1(假设这子查询查出来的是1),然后迭代查询 ls.id =ls.PARENT_ID。这种语法一般用在一个表里面有id,parent_id,parent_id对应另外一条记录的id.  所以可以只要知道id,就可以查询他们的全部父类关系。

SELECT ls.id FROM l_mas1 ls START WITH ls.ID = (SELECT lc.ORGAN_ID 

FROM L_MAS2 lc WHERE lc.USER_ID = 'test')

CONNECTBY ls.id =PRIOR ls.PARENT_ID


1 0
原创粉丝点击