Oracleデータベースを使用して、ツリー構造テーブルの子-親反復(再帰)クエリーと削除を行い、カスケード・メニューで簡単に例を示します.


前言:
開発では,単一テーブルのサブ親idカスケードテーブル構造に遭遇することが多く,ツリーの深さが不確定な場合,あるツリー構造の下のすべてのサブ親関係を持つデータを一度にクエリすることは非常に困難になる.
この場合、oracleが提供するCONNECT BY PRIORを使用します.start WITHは、ツリー構造の子親関係を持つテーブル反復クエリーと削除を実現するのに便利です.
1、ツリー構造表の例
(1)次のように構成されたMENUテーブルがあると仮定する.
ID VARCHAR2(32)     N   sys_guid()ノードid FENXID VARCHAR 2(32)Yセクションid FENXMC VARCHAR 2(100)Yセクション名FUJIDVARCHAR 2(32)Y親id FUJMCVARCHAR 2(100)Y親
(2)表の関連関係は次のとおりです.
子メニューのFUJIDは親メニューのFENXIDに等しく、ルートノードにはFUJIDがなく、各ノードに1つのノードIDがあり、単一ノードの削除・変更を容易にする
すなわち(ルートノード、ルートノードにFUJIDがない)ID、FENXID-->FUJID、FENXID(子を有する親ノード、このFUJDが前段のFENXIDに等しい)-->FUJID、FENXID-->FUJID、FENXID-->FUJID、FENXID-->FUJID、FENXID....このように推す)
2、ツリーテーブルクエリー
指定されたIDに基づいて、IDの下にあるすべての子-親関係のデータを問合せます.
SELECT ID,level
FROM
MENU
CONNECT BY PRIOR FENXID = FUJID start WITH ID = '402881cd59bbceb70159bbcefbdd0001'

これにより、親IDに基づいて、そのIDの下にあるすべての子の親関係を持つデータが再帰的にリストされます.
補足:level、レイヤを表示する
3、ツリーテーブルの削除
個々のノードを削除するのは説明せず、対応するIDに従って直接削除すればよい
ノードの下にある子の親関係を持つすべてのデータSQL文を削除するには、次のようにします.
delete from MENU where ID in(
SELECT ID
FROM
MENU
CONNECT BY PRIOR FENXID = FUJID start WITH ID = '402881cd59bbceb70159bbcefbdd0001' )

実装は、子の親関係を持つすべてのデータを再帰的にクエリーし、クエリーされたデータを削除することです.