oracle遞歸查詢子節(jié)點(diǎn)
通過(guò)子節(jié)點(diǎn)向根節(jié)點(diǎn)追朔.
select????*????from????persons.dept????start????with????deptid=76????connect????by????prior paredeptid=deptid
通過(guò)根節(jié)點(diǎn)遍歷子節(jié)點(diǎn)(不包含根節(jié)點(diǎn)).
select????*????from????persons.dept????start????with????paredeptid=0????connect????by????prior deptid=paredeptid
通過(guò)根節(jié)點(diǎn)遍歷子節(jié)點(diǎn)(包含根節(jié)點(diǎn)).
select????*????from????persons.dept????start????with????deptid=0????connect????by????prior deptid=paredeptid
可通過(guò)level?關(guān)鍵字查詢所在層次.
select????a.*,level????from????persons.dept a????start????with????paredeptid=0????connect????by????prior deptid=paredeptid
start with ...connect by?的用法唠雕,start with?后面所跟的就是就是遞歸的種子赃阀。
遞歸的種子也就是遞歸開始的地方?connect by?后面的"prior" 如果缺省:則只能查詢到符合條件的起始行董济,并不進(jìn)行遞歸查詢止喷;
connect by prior?后面所放的字段是有關(guān)系的,它指明了查詢的方向葱弟。
總結(jié):
1)prior放在子節(jié)點(diǎn)端褐啡,則表示掃描樹是以start with指定的節(jié)點(diǎn)作為根節(jié)點(diǎn)從上往下掃描》畋罚可能對(duì)應(yīng)一個(gè)或多個(gè)分支卤唉。
start with可以省略,如果省略仁期,表示對(duì)所有節(jié)點(diǎn)都當(dāng)成根節(jié)點(diǎn)分別進(jìn)行遍歷
2)prior放在父節(jié)點(diǎn)端桑驱,則表示掃描樹是以start with指定的節(jié)點(diǎn)作為最低層子節(jié)點(diǎn),從下往上掃描跛蛋。順序是子節(jié)點(diǎn)往父節(jié)點(diǎn)掃描熬的,直到根節(jié)點(diǎn)為止,這種情況只能得到一個(gè)分支赊级。
start with可以省略押框,如果省略,表示對(duì)所有節(jié)點(diǎn)都當(dāng)成最低層子節(jié)點(diǎn)分別往根節(jié)點(diǎn)方向遍歷
最后會(huì)了上面大家應(yīng)該知道下面?sys_connect_path()
sys_connect_by_path?函數(shù)主要作用是可以把一個(gè)父節(jié)點(diǎn)下的所有子節(jié)點(diǎn)通過(guò)某個(gè)字符進(jìn)行區(qū)分理逊,然后連接在一個(gè)列中顯示