oracle 提供了start with connect by 语法结构可以实现递归查询。
1. 一个简单举例:
SQL> select *
BILL_MONTH
-------------------- ---------- --------------------
200803
200803
200803
200803
200803
200803
200803
200803
200803
200803
200803
200803
12 rows selected
SQL>
SQL> select * from test
BILL_MONTH
-------------------- ---------- --------------------
200803
200803
200803
SQL>
上面的语句查找出了从1开始,并且day_number 逐渐+1 递增的,并且 msisdn 相同的哪些个数据.
2. start with
start with conditon 给出的seed 数据的范围, connect by
在下面的这个start with connect by 结构中,就表示 查找出了从1开始,父数据的day_number等于子数据的day_number-1而且父数据的msisdn=子数据的msisdn.
start with day_number=1
像这个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')
CONNECT BY ls.id = PRIOR ls.PARENT_ID