博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Oracle数据库实现树形结构表的子-父级迭代(递归)查询和删除,通过级联菜单简单举例...
阅读量:5314 次
发布时间:2019-06-14

本文共 994 字,大约阅读时间需要 3 分钟。

前言:

我们在开发中,常常遇到单表的子-父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,levelFROMMENUCONNECT BY PRIOR FENXID = FUJID start WITH ID = '402881cd59bbceb70159bbcefbdd0001'

这样就会根据父级ID递归列出了该ID下面所有具有子父级关系的数据

补充:level,用于显示第几层

3、树形表删除

删除单个节点就不解释了,直接根据对应ID删除即可

删除某个节点下面所有具有子父级关系的数据SQL语句如下:

delete from MENU where ID in(SELECT IDFROMMENUCONNECT BY PRIOR FENXID = FUJID start WITH ID = '402881cd59bbceb70159bbcefbdd0001' )
实现方式就是先递归查询出所有具有子父级关系的数据,然后删除查询到的数据即可

转载于:https://www.cnblogs.com/eguid/p/10195589.html

你可能感兴趣的文章
[转]svn常用命令
查看>>
Swing学习1——总体概述
查看>>
nginx 注释配置及详解
查看>>
QCustomplot(一) 能做什么事
查看>>
vue1.0和vue2.0生命周期----整理一
查看>>
Could not load the Tomcat server configuration at \Servers\Tomcat v7.0 Server at localhost-config
查看>>
对象的成员的初始化
查看>>
zbb20180710 maven Failed to read artifact descriptor--maven
查看>>
关于Webapp的注意事项
查看>>
使用JDBC进行数据库的事务操作(2)
查看>>
HDU 3966 Aragorn's Story (树链剖分+线段树)
查看>>
MIME协议(三) -- MIME邮件的组织结构
查看>>
javascript:设置URL参数的方法,适合多条件查询
查看>>
javascript获取URL查询字符串
查看>>
大型网站架构演化(二)——应用服务和数据服务分离
查看>>
最近沉迷生意经
查看>>
BZOJ1787 [Ahoi2008]Meet 紧急集合 LCA
查看>>
ThinkPHP讲解(十二)——文本编辑器和ajax传址
查看>>
MySQL For RedHat Linux(源码安装,附安装包)
查看>>
CSS3新属性
查看>>