天天看點

start with .. connect by prior ..

oracle中遞歸查詢用start with ... connect by prior... 字句

文法:

select 字段 from 表名 where 條件 start with 條件 connect by 條件

假設有一張表結構如下:

create table test(id number, name varchar2(40), p_id number);

--查詢id為10的所有子節點

--我的了解:先找到id=10的記錄,然後找誰的p_id=10,如此找下去,是由根節點找葉節點

select * from test start with id = 10 connect by prior id = p_id;

<==>

select * from test start with id = 10 connect by p_id = prior id;

--查詢id為10的所有父節點

--我的了解:先找到id=10的記錄,然後找這條記錄的p_id,再找p_id的p_id,如此找下去,直到找到根節點,是由葉節點找根節點

select * from test start with id = 10 connect by prior p_id = id;

select * from test start with id = 10 connect by id = prior p_id;

說明:

   1.prior如果省略,不進行深層遞歸查詢

   2.prior如果在等号左邊,表示從根節點向葉子節點檢索,也叫做向下查詢

   3.prior如果在等号右邊,表示從葉子節點向根節點檢索,也叫做向上查詢

-------------------------------------------------------------------------------------------

補充:

    prior可以在操作符的任意一邊,它的作用就是指定父節點。

<a href="http://s3.51cto.com/wyfs02/M00/59/40/wKioL1TNhCfwRr2SAALwQRFw2a4215.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/59/42/wKiom1TNgwrA5TWeAAHwBwcmd2k795.jpg" target="_blank"></a>

本文轉自    手不要亂摸      51CTO部落格,原文連結:http://blog.51cto.com/5880861/1397468