多級樹的查詢

2021-09-02 09:25:34 字數 1282 閱讀 7034

start with connect by prior子句實現遞迴查詢

表中第一行1001是1002的父節點,而第二行1002又是1003的父節點,如此迴圈。如題:要求給出其中乙個數字能找出其最終的根節點!應該要怎麼樣實現呢?請看如下sql語句,這裡我就拿1008為例。

圖中第一行第乙個num1就是根節點了。再來分析下sql語句:

select num1,num2,level

from carol_tmp

start with num2=1008

connect by num2=prior num1 order by level desc;

prior放的左右位置決定了檢索是自底向上還是自頂向下.很明顯以上的sql選擇了自底向上,所以最終得到了根節點。

這次要求獲得最小的葉節點

第一行的num1就是最小的葉節點了,在注意看下sql**和上面的**有什麼不同之處:

select num1,num2,level

from carol_tmp

start with num2=1008

connect by prior num2= num1 order by level desc;

這次prior和num2放在了一起,他意思就是從num2開始尋找其下面最小的葉節點。

為什麼prior和誰在一起比較重要呢?比如prior和 num2同在等號的一邊,這個時候要看num2和num1的關係。若num2一直是parent,那麼這個sql找的就是根節點。

select sys_connect_by_path(ename, '>') "path"    

from scott.emp

start with ename = 'king'

connect by prior empno = mgr;

>king

>king>jones

>king>jones>scott

>king>jones>scott>adams

>king>jones>ford

>king>jones>ford>smith

>king>blake

>king>blake>allen

>king>blake>ward

>king>blake>martin

>king>blake>turner

>king>blake>james

>king>clark

>king>clark>miller

mssql多級查詢 CTE遞迴

最近做乙個製造業專案中涉及到打包問題,其模式為 乙個a b c 可以無限打包,a包含b,b包含c等。之間遇到了 1 打包後包裹數量需要更新,更新時必須對他的父級包號也進行更新,所以必須查詢出某個包號對應的所有父級包號 2 拆包 將包裹拆除,希望把a下面的包裹號也連同一起拆除,這樣必須查詢出某個包號對...

Java 多級選單樹工具

這是乙個基礎bean 功能描述 分組資訊bean 注意,下面的bean每個屬性都為必要屬性,不可缺一 可以在此bean基礎上再新增多個屬性,不會影響樹結構 類上的三個註解為lombok外掛程式 author chihiro version v1.0 date 2019 03 06 17 35 dat...

遞迴的方式查詢出多級目錄

1 資料庫關係 mysql id 自增的id pid 父級目錄的id rolename 目錄名稱 10 一級目錄21 二級目錄32 目錄43 四級目錄 2 程式持久層 2 1 程式持久層介面 通過pid查詢單條資料 param pid 父級主鍵 return 例項物件 list querybypid...