Mysql8.0递归查询的简单用法示例

下面我将为大家详细介绍Mysql8.0递归查询的简单用法及示例。

什么是递归查询

递归查询是指在数据库中通过自身关联取得本身所需要的数据。通常我们会使用递归查询来查询有层级关系的数据,例如:树状结构等。

Mysql8.0递归查询的简单用法

在Mysql8.0之后,Mysql新增了WITH RECURSIVE关键字,可以很方便地进行递归查询。使用方式如下:

WITH RECURSIVE 递归查询语句

其中,“递归查询语句”指的是需要进行递归查询的SQL语句,WITH RECURSIVE关键字则是告诉Mysql这是一条递归查询语句。

示例1:查询树状结构的子级节点

我们假设有一个表示部门关系的表dept,其表结构及数据如下:

CREATE TABLE dept (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(100) DEFAULT NULL,
  parent_id int(11) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO dept (name,parent_id) VALUES ('总部',0),('财务部',1),('人事部',1),('市场部',1),('技术部',1),('人力资源部',3),('招聘部',3),('社保部',6),('公积金部',6);

我们现在需要查询出‘人事部’下面的所有部门,包括其子部门,可以使用如下递归查询语句:

WITH RECURSIVE cte (id,name,parent_id) AS (
  SELECT id,name,parent_id FROM dept WHERE name = '人事部' 
  UNION ALL
  SELECT d.id,d.name,d.parent_id FROM dept d JOIN cte ON d.parent_id = cte.id
)
SELECT * FROM cte;

我们在递归查询语句中定义了一个cte(Common Table Expression)公共表达式,并在其中设置了初始值为查询‘人事部’,接着我们在下方使用UNION ALL关键字加入子集查询,查询条件为子集的parent_id等于父集的id。

最后我们查询cte公共表达式即可获取到查询结果,查询结果如下:

+----+--------+-----------+
| id |  name  | parent_id |
+----+--------+-----------+
|  3 | 人事部 |         1 |
|  6 | 人力资源部 |       3 |
|  7 | 招聘部 |         6 |
+----+--------+-----------+

示例2:查询树状结构的所有父级节点

接下来我们再来看一个查询树状结构的所有父级节点的递归查询语句。假设我们有一个存储组织机构的表org,其表结构及数据如下:

CREATE TABLE org (
  id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(100) DEFAULT NULL,
  parent_id int(11) DEFAULT NULL,
  PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

INSERT INTO org (name,parent_id) VALUES 
  ('A',0),('B',1),('C',2),('D',3),('E',4),
  ('F',0),('G',6),('H',7),('I',8),('J',9);

我们现在需要查询出‘E’所在的所有父级节点,可以使用如下递归查询语句:

WITH RECURSIVE cte AS (
  SELECT id,name,parent_id FROM org WHERE name = 'E'
  UNION ALL
  SELECT d.id,d.name,d.parent_id FROM org d JOIN cte ON d.id = cte.parent_id
)
SELECT * FROM cte;

我们同样在递归查询语句中定义了一个cte公共表达式,设置了初始值为查询E所在的部门,再通过UNION ALL关键字进行子集查询,查询条件为我们在公共表达式中查询到的parent_id等于当前查询结果的id。

最后我们查询cte公共表达式即可获取到查询结果,查询结果如下:

+----+------+------+-----------+
| id | name | parent_id | 
+----+------+------+-----------+
|  5 |  E   |         4 |
|  4 |  D   |         3 |
|  2 |  C   |         1 |
|  1 |  B   |         0 |
+----+------+------+-----------+

至此,Mysql8.0递归查询的简单用法及两个示例就介绍完毕了。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql8.0递归查询的简单用法示例 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • CentOS7.x卸载与安装MySQL5.7的操作过程及编码格式的修改方法

    下面是详细的“CentOS7.x卸载与安装MySQL5.7的操作过程及编码格式的修改方法”的完整攻略。 卸载MySQL 在卸载MySQL之前,应该先备份你的MySQL数据,以下是卸载MySQL的步骤: 停止MySQL服务 sudo systemctl stop mysqld.service 卸载MySQL软件 sudo yum remove mysql* 删…

    other 2023年6月20日
    00
  • 函数flst_init

    函数flst_init 函数flst_init是一种图像处理算法中的函数,用于对图像进行分割处理。本攻略将详细讲解函数flst_init的原理、实现方法和示例说明。 原理 函数flst_init的原理是对图像进行分割处理,将图像中的每个像素分配到不同的区域中。具体来说,函数flst_init可以分为以下几步骤: 1.图像进行预处理,如去噪、增强等。 对图像进…

    other 2023年5月7日
    00
  • 魔兽世界6.0猎人输出循环 生存射击兽王分析

    魔兽世界6.0猎人输出循环 生存射击兽王分析 生存猎人输出循环 生存猎人是一种以生存为主题的猎人职业,主要特点是德鲁伊的化身,能够使用治疗、控制和伤害技能等多种技能,能单独进行大部分任务。 生存猎人的输出循环主要包括以下几个步骤: 稳固射击:可以用于快速输出、击退一些小怪。每次施放该技能后,下次稳固射击的攻击速度将会提高。建议在怪物从远处奔向自己时就施放该技…

    other 2023年6月27日
    00
  • js添加style

    JS 添加 Style 在 Web 开发中,我们经常需要使用 JavaScript 动态地添加样式。本文将介绍如何使用 JavaScript 添加 Style,包括基本概念、应用场景、实现方法和示例说明。 基本概念 在 Web 开发中,我们可以使用 JavaScript 动态地添加样式。通过添加样式,我们可以改变元素的外观、布局和行为。在 JavaScrip…

    other 2023年5月6日
    00
  • 百度编辑器ueditor的使用方法

    百度编辑器ueditor的使用方法 ueditor是一款由百度开发的富文本编辑器,通常被用于网站等前端开发中。它可以轻松地嵌入到网页中,提供了许多丰富的功能,包括字体样式、文字颜色、表格、多媒体插入等等,并且可以与常见的后台语言(如:PHP、Java、Node.js等)实现良好的集成。本文将介绍如何在你的网站上使用百度编辑器ueditor。 第一步:下载ue…

    其他 2023年3月28日
    00
  • 百度地图给map添加右键菜单(判断是否为marker)

    要给百度地图的map添加右键菜单,首先需要新建一个ContextMenu实例,并将其添加到地图上,代码如下: var contextMenu = new BMap.ContextMenu(); map.addContextMenu(contextMenu); 接下来,我们需要判断用户点击右键时,鼠标指针所在的位置是否为地图上的marker。代码如下: map…

    other 2023年6月27日
    00
  • 10张动图学会python循环与递归问题

    “10张动图学会python循环与递归问题”攻略 在本文中,我们将介绍10张动图,通过这些动图的解析,帮助你理解Python中的循环与递归问题。本攻略将分为以下几部分: 循环控制语句 for循环 while循环 递归函数 1. 循环控制语句 在Python中,循环控制语句包括: break语句:用于在循环中,执行到break语句时强制退出循环。 contin…

    other 2023年6月27日
    00
  • Windows WMIC命令使用详解(附实例)

    Windows WMIC命令使用详解(附实例) 一、WMIC命令是什么? WMIC 全称是 Windows Management Instrumentation Command,是一个命令行工具,用于控制本地或远程计算机的系统管理资源(如进程、服务、事件日志等)。可以获取、查询、配置和管理各种资源。 二、WMIC命令的使用方法 1. WMIC命令的基本语法 …

    other 2023年6月26日
    00
合作推广
合作推广
分享本页
返回顶部