oracle遞迴查詢

來源:互聯網
上載者:User

標籤:

文法:

select *from tablename t start with column = ?connect by [prior] t.id = [prior] t.parentid

例如:菜單表,表結構如下

  

資料如下:

  

一、從上向下查

1、查詢某個指定id的所有下級菜單

select * from tb_menu tstart with t."PARENT" = 1connect by prior t."ID" = t."PARENT"

註:從上向下查,就是指定某個節點,查詢其下所有的子節點(包含直接子節點和非直接子節點),故start with 條件接parent = ?;

  而connect by是指定遞迴時記錄與記錄間的關係;

  最重要的區分是prior:從上向下查,1作為parent,故將prior放在parent欄位的另外一邊,即表示查詢所有的子條目

2、查詢某個指定id的所有下級菜單及該指定id的菜單資訊

select * from tb_menu tstart with t.id = 1connect by prior t."ID" =  t."PARENT"

  註:從上向下查詢,尋找某個指定節點下的所有子節點和該指定節點,故start with條件指定id = ?,表示id = ?的資料開始向下查詢(包含指定id條目)。

  而connect by是指定遞迴時記錄與記錄間的關係;

  最重要的區分是prior:從上向下查,1作為parent,故將prior放在parent欄位的另外一邊,即表示查詢所有的子條目

二、從下向上查詢

1、查詢某個指定id的所有上級菜單

select * from tb_menu tstart with t.id = 42connect by  t."ID" = prior t."PARENT"

  註:從下向上查詢,只有“包含該條記錄”的查詢,這點同從上向下查詢不同

    prior的位置:將42看作id,擷取其所有的parent,所以將prior放在parent一邊

三、總結

  1、從上向下查詢,可以有兩種結果:包含指定條目、不包含指定條目

  2、從下向上查詢,只有一種個結果:包含指定條目

  3、prior的位置:

    從上向下查詢:start with column = ?

        ?是作為父級,prior放在子級一邊,表示查詢所有的子級

    從下向上查詢:start with column = ?

        ?是作為子級,prior放在父級一邊,表示查詢所有的父級

 

oracle遞迴查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.