Oracle递归查询

描述:现有两个数据表base_menu1和base_menu2,存储菜单,其中id字段表示菜单的唯一id,parent_id存储该菜单父级菜单的id,用递归查询的方式将菜单按照层级关系查询出来,并且要展示菜单的层级关系。(如区分菜单是几级菜单)

cs 复制代码
select t.id,t.name,t.parent_id
    case
        when level=1 then '一级菜单'
        when level=2 then '二级菜单'
        else '三级菜单'
    end as menu_level
 from (
     select id,name,parent_id
     from base_menu1
     union all
     select id,name,parent_id
     from base_menu2 
)t
start with t.parent_id is null
connect by prior t.id=t.parent_id

注:

  1. union all:表示两个表的查询结果合并

  2. connect by prior和start with用来实现递归查询。start with指定递归的起始节点,connect by prior指定父子关系。

  3. case when根据菜单的层级关系(level)向菜单添加level字段,使用该字段区分菜单的层级。

相关推荐
麦聪聊数据6 小时前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_6 小时前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡6 小时前
【MySQL数据库】数据类型与表约束
数据库·mysql
曹牧7 小时前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon7 小时前
SQL学习指南——视图
数据库·sql
活宝小娜7 小时前
mysql详细安装教程
数据库·mysql·adb
贤时间7 小时前
codex 助力oracle ebs 开发
数据库·oracle
秉承初心7 小时前
PostgreSQL 数据性能瓶颈突破实战
数据库·postgresql·oracle
Database_Cool_8 小时前
即席查询(Ad-Hoc)数据库选型:AnalyticDB MySQL 秒级 Ad-Hoc 分析方案
数据库·mysql