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...