使用Oracle数据库实现树形结构表的子-父级迭代(递归)查询和删除,通过级联菜单简单举例

前言:

我们在开发中,常常遇到单表的子-父id级联的表结构,在树形的深度不确定的情况下,一次查询出某个树形结构下的所有具有子-父级关系的数据变得十分困难。

这时,我们使用oracle提供的CONNECT BY PRIOR ...  start WITH 实现树形结构具有子父级关系的表迭代查询和删除就会很方便。

 

1、树形结构表举例

(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                       父级名称

(2)表的关联关系如下:

子级菜单的FUJID等于父级菜单的FENXID,根节点没有FUJID,每个节点都有一个节点ID用于方便单个节点增删改查

即((根节点,根节点无FUJID)ID,FENXID-->FUJID,FENXID(具有子级的父节点,该FUJD等于上一级的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' )


实现方式就是先递归查询出所有具有子父级关系的数据,然后删除查询到的数据即可

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

eguid_1

感谢支持eguid原创技术文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值