使用Oracle數據庫實現樹形結構表的子-父級迭代(遞歸)查詢和刪除,經過級聯菜單簡單舉例

前言:

咱們在開發中,經常遇到單表的子-父id級聯的表結構,在樹形的深度不肯定的狀況下,一次查詢出某個樹形結構下的全部具備子-父級關係的數據變得十分困難。sql

這時,咱們使用oracle提供的CONNECT BY PRIOR ...  start WITH 實現樹形結構具備子父級關係的表迭代查詢和刪除就會很方便。oracle


一、樹形結構表舉例

(1)假設有一個MENU表,該表結構以下:

ID VARCHAR2(32)     N   sys_guid()    節點id
FENXID VARCHAR2(32)      Y                       分項id
FENXMC VARCHAR2(100)    Y                       分項名稱
FUJIDVARCHAR2(32)      Y                       父級id
FUJMCVARCHAR2(100)    Y                       父級名稱
ui

(2)表的關聯關係以下:

子級菜單的FUJID等於父級菜單的FENXID,根節點沒有FUJID,每一個節點都有一個節點ID用於方便單個節點增刪改查spa

即((根節點,根節點無FUJID)ID,FENXID-->FUJID,FENXID(具備子級的父節點,該FUJD等於上一級的FENXID)-->FUJID,FENXID-->FUJID,FENXID-->FUJID,FENXID....以此類推)code

二、樹形表查詢

根據指定的ID查詢該ID下面全部子-父級關係的數據遞歸

SELECT ID,level FROM MENU CONNECT BY PRIOR FENXID = FUJID start WITH ID = '402881cd59bbceb70159bbcefbdd0001'

這樣就會根據父級ID遞歸列出了該ID下面全部具備子父級關係的數據開發

補充:level,用於顯示第幾層class

三、樹形表刪除

刪除單個節點就不解釋了,直接根據對應ID刪除便可gui

刪除某個節點下面全部具備子父級關係的數據SQL語句以下:數據

delete from MENU where ID in( SELECT ID FROM MENU CONNECT BY PRIOR FENXID = FUJID start WITH ID = '402881cd59bbceb70159bbcefbdd0001' )
實現方式就是先遞歸查詢出全部具備子父級關係的數據,而後刪除查詢到的數據便可
相關文章
相關標籤/搜索