• 使用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' )

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




  • 相关阅读:
    sysaux 过大如何清理释放空间
    oracle获取当前时间前半小时和整点的时间
    在Mac OS 下 npm install 报权限不足的错误
    基于 NPOI + 反射的Excel导入帮助类
    从零开始 MongoDB 集群(ReplSet)搭建 之一 MongoDB的安装
    使用Swagger导入cvs文件出现乱码的解决办法
    基于DynamicExpresso的自定义表达式计算
    从零开始 MongoDB 集群(ReplSet)搭建 之二 群集搭建
    halcon视觉入门钢珠识别
    纯前端如何在网页端播放摄像头的实时画面
  • 原文地址:https://www.cnblogs.com/eguid/p/6821566.html
Copyright © 2020-2023  润新知