使用Oracle数据库实现树形结构表的子-父级迭代(递归)查询和删除,通过级联菜单简单举例
2017-01-22 11:04
821 查看
前言:
我们在开发中,常常遇到单表的子-父id级联的表结构,在树形的深度不确定的情况下,一次查询出某个树形结构下的所有具有子-父级关系的数据变得十分困难。这时,我们使用oracle提供的CONNECT BY PRIOR ... start WITH 实现树形结构具有子父级关系的表迭代查询和删除就会很方便。
1、树形结构表举例
(1)假设有一个MENU表,该表结构如下:
ID VARCHAR2(32) N sys_guid() 节点idFENXID 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' )
实现方式就是先递归查询出所有具有子父级关系的数据,然后删除查询到的数据即可
相关文章推荐
- 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例
- 使用Oracle数据库实现树形结构表的子-父级递归查询和删除,通过级联菜单简单举例
- 使用postgre数据库实现树形结构表的子-父级迭代查询,通过级联菜单简单举例
- 使用递归删除树形结构的所有子节点(java和mysql实现)
- 简单的递归,实现树结构菜单显示
- MyBatis之自查询,使用 递归实现 N级联
- 使用树形结构与CTE实现父子列多层次查询
- Oracle DBLINK 简单使用 oracle在进行跨库访问时,可以通过创建dblink实现,今天就简单的介绍下如果创建dblink,以及通过dblink完成插入、修改、删除等操
- Java实现通过递归遍历树形结构
- 递归删除树形结构的所有子节点(java和mysql实现)
- 使用oracle 9i 里的层级查询(Hierarchical Queries)实现树状表结构的递归数据查询
- 设计与实现的简单和经常使用的权限系统(五岁以下儿童):不维护节点的深度level,手工计算level,树形结构
- java学习笔记 使用递归 将文件目录树形结构输出,递归删除目录 文件夹。
- 公用表表达式CTE简单递归使用-简单树形结构
- UserDao的简单使用,实现增加,删除,查询
- mysql中使用递归实现父级部门所有子级信息的查询
- Java递归实现删除树形结构的任一节点
- 使用oracle 9i 里的层级查询(Hierarchical Queries)实现树状表结构的递归数据查询
- MySql的sql语句中添加存储过程或者存储函数来实现Oracle中的start with ……connect by prior……递归(树形结构数据)查询
- 使用GridView加DetailsView实现查询,新增,编辑,删除