MySQL递归公用表表达式

😇作者介绍:一个有梦想、有理想、有目标的,且渴望能够学有所成的追梦人。

🎆学习格言:不读书的人,思想就会停止。——狄德罗

⛪️个人主页:进入博主主页

🗼专栏系列:MySQL知识

🌼欢迎小伙伴们访问到博主的文章内容,在浏览阅读过程发现需要纠正的地方,烦请指出,愿能与诸君一同成长!

目录

文章内容如下

✏️前言

✏️一、添加菜单表

✏️二、递归公用表表达式

✏️三、测试运行结果

✏️总结


文章内容如下


✏️前言

MySQL递归公用表表达式,简称(CTE)递归CTE是一种特殊的CTE,它可以用来执行递归查询询,即查询可以自顶向下或自底向上遍历层级结构。在一些特殊情况下,我们会常用到这个方法去处理一些特殊情况。下面就用菜单表的信息来演示‘自顶向下遍历层级


✏️一、添加菜单表

👉在这之前我们先添加一张菜单表,方便后面测试,这里的菜单表仅仅提供参考,注意表的列名命名不算规范。运用到实际项目中的时候,要注意表列名的命名必须要规范哈。下面内容参考即可。代码如下

-- 菜单表
CREATE TABLE menu_table
(menu_id int PRIMARY KEY AUTO_INCREMENT NOT NULL , -- 主键自增menu_order varchar(500) NULL , -- 层级IDmenu_icon varchar(20) NULL , -- 菜单图标menu_name varchar(20) NULL , -- 菜单名称menu_parent varchar(20) NULL , -- 父菜单名称menu_url varchar(100) NULL , -- 菜单urlmenu_permissionmark varchar(50) NULL , -- 权限标识menu_addtime datetime DEFAULT current_timestamp  NULL , -- 菜单创建时间menu_level varchar(500) NULL , -- 菜单层级关联id(父级为0)menu_state int NULL DEFAULT 1  -- 菜单状态)COMMENT '菜单表',ENGINE = INNODB DEFAULT CHARSET=utf8 ;	select * from menu_table ;
-- 添加数据
INSERT INTO menu_table(menu_order,menu_icon,menu_name,menu_parent,menu_url,menu_permissionmark,menu_level)
VALUES 
('1','layui-icon-heart','系统管理','父级','indexs1.html','process.manage.list',null),
('2','layui-icon-heart','安全设置管理','父级','indexs2.html','role.manage.list',null),
('3','layui-icon-heart','工作流程','父级','indexs1.html','process.manage.list',null),
('4','layui-icon-heart','人力资源管理','父级','indexs2.html','role.manage.list',null),
('5','layui-icon-heart','企业信息管理','父级','indexs1.html','process.manage.list',null),
('6','layui-icon-heart','通讯管理','父级','indexs2.html','role.manage.list',null),
('7','layui-icon-heart','工作管理','父级','indexs1.html','process.manage.list',null),
('8','layui-icon-heart','时间管理','父级','indexs2.html','role.manage.list',null),
('9','layui-icon-heart','办公管理','父级','indexs1.html','process.manage.list',null),
('10','layui-icon-heart','组织架构管理','父级','indexs2.html','role.manage.list',null),('11','layui-icon-heart','用户管理','1子级','indexs1.html','process.manage.list','1'),
('12','layui-icon-heart','角色管理','1子级','indexs2.html','role.manage.list','1'),
('13','layui-icon-heart','权限管理','1子级','indexs1.html','process.manage.list','2'),
('14','layui-icon-heart','流程管理','1子级','indexs2.html','role.manage.list','3'),
('15','layui-icon-heart','考勤管理','1子级','indexs1.html','process.manage.list','4'),
('16','layui-icon-heart','公告管理','1子级','indexs2.html','role.manage.list','5'),
('17','layui-icon-heart','邮件管理','1子级','indexs1.html','process.manage.list','6'),
('18','layui-icon-heart','任务管理','1子级','indexs2.html','role.manage.list','7'),
('19','layui-icon-heart','日程管理','1子级','indexs1.html','process.manage.list','8'),
('20','layui-icon-heart','计划管理','1子级','indexs2.html','role.manage.list','9'),
('21','layui-icon-heart','文件管理','1子级','indexs1.html','process.manage.list','1'),
('22','layui-icon-heart','笔记管理','1子级','indexs2.html','role.manage.list','1'),
('23','layui-icon-heart','员工通讯管理','1子级','indexs1.html','process.manage.list','6'),
('24','layui-icon-heart','讨论管理','1子级','indexs2.html','role.manage.list','6'),
('25','layui-icon-heart','便签管理','1子级','indexs1.html','process.manage.list','1'),
('26','layui-icon-heart','部门管理','1子级','indexs2.html','role.manage.list','10'),
('27','layui-icon-heart','采购部','2子级','indexs2.html','role.manage.list','26'),
('28','layui-icon-heart','外出岗','3子级','indexs2.html','role.manage.list','27'),
('29','layui-icon-heart','出口进货岗','3子级','indexs2.html','role.manage.list','27'),
('30','layui-icon-heart','财务部','2子级','indexs2.html','role.manage.list','26'),
('31','layui-icon-heart','会计师岗位','3子级','indexs2.html','role.manage.list','30'),
('32','layui-icon-heart','收银员岗位','3子级','indexs2.html','role.manage.list','30'),
('33','layui-icon-heart','菜单管理','1子级','indexs2.html','role.manage.list','1'),
('34','layui-icon-heart','市场部','2子级','indexs2.html','role.manage.list','26'),
('35','layui-icon-heart','总经办','2子级','indexs2.html','role.manage.list','26')

✏️二、递归公用表表达式

👉通过这个表达式,根据菜单名称查询到与这个名称相关的所有菜单信息,比如:‘部门管理’,在部门管理下有‘财务部’,在财务部下有‘会记岗’等等,使用这个表达式完成这一效果。

代码如下

WITH RECURSIVE SubMenu AS (SELECTa.menu_id,a.menu_name,a.menu_order,a.menu_levelFROMmenu_table AS aWHEREa.menu_name = '部门管理'UNION ALLSELECTb.menu_id,b.menu_name,b.menu_order,b.menu_levelFROMmenu_table AS bINNER JOIN SubMenu sm ON b.menu_level = sm.menu_order
)
SELECT * FROM SubMenu;

WITH RECURSIVE SubMenu AS (...)定义了一个递归CTE,它首先选择所有menu_name为“部门管理”的条目,然后递归地选择每一个条目下的子条目。UNION ALL用来合并每次递归查询的结果。

✏️三、测试运行结果


✏️总结

在这种查询中,每一次递归调用都会基于前一次查询的结果集,直到达到某个终止条件(例如,没有更多的子条目)。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/300658.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基本的逻辑门

前言 本篇文章介绍基本的逻辑门,然后给出C语言描述 逻辑门是在集成电路上的基本组件。简单的逻辑门可由晶体管组成。这些晶体管的组合可以使代表两种信号的高低电平在通过它们之后产生高电平或者低电平的信号。高、低电平可以分别代表逻辑上的“真”与“假”或二进…

PHP-8.1.0-dev 后门命令执行漏洞复现_zerodiumvar_dump

0x00漏洞描述 PHP 8.1.0-dev 版本在2021年3月28日被植入后门,但是后门很快被发现并清除。当服务器存在该后门时,攻击者可以通过发送User-Agentt头来执行任意代码。 0x01影响范围 PHP 8.1.0-dev 0x02环境搭建 1、本次环境搭建使用vulhub中的docker环…

【开源】基于Vue+SpringBoot的新能源电池回收系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用户档案模块2.2 电池品类模块2.3 回收机构模块2.4 电池订单模块2.5 客服咨询模块 三、系统设计3.1 用例设计3.2 业务流程设计3.3 E-R 图设计 四、系统展示五、核心代码5.1 增改电池类型5.2 查询电池品类5.3 查询电池回…

【工具】windeployqt 在windows + vscode环境下打包

目录 0.背景简介 ​编辑 1.windeployqt简介 2.打包具体过程 1)用vscode编译,生成Release文件夹(也有Debug文件夹,但是发布版本一般都是用Release) 2)此时可以看下Release文件夹内,一般是.…

【Vue2+3入门到实战】(4)Vue基础之指令修饰符 、v-bind对样式增强的操作、v-model应用于其他表单元素 详细示例

目录 一、今日学习目标1.指令补充 二、指令修饰符1.什么是指令修饰符?2.按键修饰符3.v-model修饰符4.事件修饰符 三、v-bind对样式控制的增强-操作class1.语法:2.对象语法3.数组语法4.代码练习 四、京东秒杀-tab栏切换导航高亮1.需求:2.准备代…

基于MPU6050的跌倒检测项目设计

一、背景 随着人口老龄化的不断加剧,老年人的健康和安全问题备受关注。本设计旨在利用STM32单片机与MPU6050传感器相结合,实现基于角度变化的跌倒检测系统。这一系统不仅能够快速、准确地检测老年人是否发生跌倒,还通过整合通信模块实现了实…

怎么搭建实时渲染云传输服务器

实时渲染云传输技术方案,在数字孪生、虚拟仿真领域使用越来越多,可能很多想使用该技术方案项目还不知道具体该怎么搭建云传输服务器,具体怎么使用实时云渲染平台系统。点量云小芹将对这两个问题做集中分享。 一、实时渲染服务器怎么搭建&…

blender scripting 编写

blender scripting 编写 一、查看ui按钮对应的代码二、查看或修改对象名称三、案例:渲染多张图片并导出对应的相机参数 一、查看ui按钮对应的代码 二、查看或修改对象名称 三、案例:渲染多张图片并导出对应的相机参数 注:通过ui交互都设置好…

算法与数据结构--二叉搜索树与自平衡二叉搜索树

0.字典(即c的map) 注:字典的 "member运算" 指的是检查字典中是否存在某个特定的键的操作,即查询操作。 如果我们使用数组来实现字典/map,虽然使用二分法查询也可以达到logn,但是的话插入和删除太…

【操作系统】探究进程奥秘:显示进程列表的解密与实战

​🌈个人主页:Sarapines Programmer🔥 系列专栏:Linux专栏:《探秘Linux | 操作系统解密》⏰诗赋清音:月悬苍穹泛清辉,梦随星河徜徉辉。情牵天际云千层,志立乘风意自飞。 ​ 目录 &a…

ImageJ图像滤波基础

文章目录 滤波简单滤波器卷积滤波Unsharp MaskTop Hat ImageJ系列:安装与初步💎灰度图像处理 滤波 预设滤波器 ImageJ的Process菜单提供了诸多图像滤波器,其中大部分方法均可定制参数,但也提供了一些已经预设参数的处理方法。 …

Visual Studio2022配置ReSharper C++ 常用设置

如需安装免费的可以在下面留言,看到即回复 文章目录 Visual Studio2022配置ReSharper C 常用设置配置Visual Studio2022,使其能够按回车进行补全配置ReSharper C 设置自动弹出配置ReSharper C 的快捷键ReSharper C 去掉注释拼写使用中文注释 如何关闭新版…