日期:2014-05-17  浏览次数:20858 次

sql查出一棵树中的所有叶子节点,或者所有的双亲节点
如题。

------解决方案--------------------
SELECT LPAD( ' ', 2*level-1)||SYS_CONNECT_BY_PATH(last_name, '/ ') "Path "
FROM hr.employees
START WITH last_name = 'Kochhar '
CONNECT BY PRIOR employee_id = manager_id
ORDER SIBLINGS BY last_name


結果為
Path
----------------------------------------
/Kochhar
/Kochhar/Baer
/Kochhar/Greenberg
/Kochhar/Greenberg/Chen
/Kochhar/Greenberg/Faviet
/Kochhar/Greenberg/Popp
/Kochhar/Greenberg/Sciarra
/Kochhar/Greenberg/Urman
/Kochhar/Higgins
/Kochhar/Higgins/Gietz
/Kochhar/Mavris
/Kochhar/Whalen
已选择12行。

解释:
START WITH:指定root
CONNECT BY:指定父子关系
PRIOR:指定谁具有父亲row的资格。此例中,表示如果row1.employee_id=row2.manager_id,则row1是row2的父亲row
level: 表示等级了。
SIBLINGS:表示在相同level中排序。
SYS_CONNECT_BY_PATH( , ):x是column,c是字符。返回x的path,用c作为分界符,从root到本节点。


------解决方案--------------------
level是使用connet by 時可以引用的系統欄位,就像rownum一樣.LZ應該自己去好好看看相關書籍,這樣就明白是怎麼回事的.