前言:

我们在开发中,常常遇到单表的子-父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' )

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

最新文章

  1. Linux0.11内核--引导程序分析
  2. hibernate4连接mysql自动创建表之错误
  3. Android自动化测试 - Robotium之Robotium在不同分辨率下clickonview不支持解决方案
  4. POJ 3320 (尺取法+Hash)
  5. js判断鼠标进入以及离开容器的方向
  6. 基于Java的数据采集(终结篇)
  7. android实现断点续传
  8. oracle记录解锁
  9. page cache和buffer cache 图解
  10. mysql的日志
  11. 在Google map图上做标记,并把标记相连接
  12. [LeetCode]Swap Nodes in Pairs 成对交换
  13. Java8高中并发
  14. 【转载】跟我一起学习VIM - vim插件
  15. Swing-BoxLayout用法-入门
  16. SPRINGBOOT 读书笔记
  17. 基于表单数据的封装,泛型,反射以及使用BeanUtils进行处理
  18. 利用 vue-cli 构建一个 Vue 项目
  19. mixins,generics(ApiView)
  20. (转)linux下查看已安装的软件与卸载

热门文章

  1. CF #271 F Ant colony 树
  2. Linux防火墙配置—SNAT1
  3. Array和ArrayCollection作为数据源的一个应用区别
  4. 又拍云SSL证书全新上线,提供一站式HTTPS安全解决方案
  5. html自定义调控
  6. 安卓和iOS移动APP开发设计应该考虑哪些问题
  7. 使用 Python 实现命令行词典(一)
  8. Vue 项目实战系列 (二)
  9. PHP学习笔记-1
  10. 对象克隆(clone)实例详解