iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL5.7 实现递归查询
  • 444
分享到

MySQL5.7 实现递归查询

数据库mysqljava 2023-08-18 21:08:00 444人浏览 安东尼
摘要

创建测试环境 在线数据库 http://sqlfiddle.com/   1. 创建表 DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` ( `id` varchar(10) CH

创建测试环境

在线数据库 http://sqlfiddle.com/

1. 创建表

DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept`  (  `id` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL,  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,  `pid` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,  PRIMARY KEY (`id`) USING BTREE) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

2. 插入测试数据

INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1000', '总公司', NULL);INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1001', '北京分公司', '1000');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1002', '上海分公司', '1000');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1003', '北京研发部', '1001');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1004', '北京财务部', '1001');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1005', '北京市场部', '1001');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1006', '北京研发一部', '1003');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1007', '北京研发二部', '1003');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1008', '北京研发一部一小组', '1006');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1009', '北京研发一部二小组', '1006');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1010', '北京研发二部一小组', '1007');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1011', '北京研发二部二小组', '1007');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1012', '北京市场一部', '1005');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1013', '上海研发部', '1002');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1014', '上海研发一部', '1013');INSERT INTO `dept`(`id`, `name`, `pid`) VALUES ('1015', '上海研发二部', '1013');commit;

3. 查看一下刚才插入的数据

select * from dept;

结果如下:

id  |name     |pid |----+---------+----+1000|总公司      |    |1001|北京分公司    |1000|1002|上海分公司    |1000|1003|北京研发部    |1001|1004|北京财务部    |1001|1005|北京市场部    |1001|1006|北京研发一部   |1003|1007|北京研发二部   |1003|1008|北京研发一部一小组|1006|1009|北京研发一部二小组|1006|1010|北京研发二部一小组|1007|1011|北京研发二部二小组|1007|1012|北京市场一部   |1005|1013|上海研发部    |1002|1014|上海研发一部   |1013|1015|上海研发二部   |1013|

向上递归

根据一个子节点id,查询所有父节点(包含⾃⾝)

-- 根据一个子节点id,查询所有父节点(包含⾃⾝)SELECT t2.id, t2.name, t2.pid FROM (SELECT @r as _id,              (SELECT @r := pid FROM dept WHERE id = _id) as pid,              @l := @l + 1 as lvl         FROM (SELECT @r := '1014', @l := 0) vars, dept as h        WHERE @r <> 0) t1 JOIN dept t2   ON t1._id = t2.idORDER BY T1.lvl DESC; 

代码 @r := 1014 表示查询 id 为 1014 的所有父类

id  |name  |pid |----+------+----+1000|总公司   |    |1002|上海分公司 |1000|1013|上海研发部 |1002|1014|上海研发一部|1013|

向下递归

根据⼀个⽗节点查询所有⼦节点(包含⾃⾝)

-- 根据⼀个⽗节点查询所有⼦节点(包含⾃⾝)SELECT au.id, au.name, au.pid  FROM (SELECT * FROM dept WHERE pid IS NOT NULL) au,       (SELECT @pid := '1002') pd WHERE FIND_IN_SET(pid, @pid) > 0   AND @pid := concat(@pid, ',', id)UNIONSELECT id, name, pid  FROM dept WHERE id = '1002' ORDER BY id;  
id  |name  |pid |----+------+----+1002|上海分公司 |1000|1013|上海研发部 |1002|1014|上海研发一部|1013|1015|上海研发二部|1013|

根据多个⽗节点查询所有⼦节点(包含⾃⾝)

-- 根据多个⽗节点查询所有⼦节点(包含⾃⾝)SELECT au.id, au.name, au.pid  FROM (SELECT * FROM dept WHERE pid IS NOT NULL) au,       (SELECT @pid := '1002,1005') pd WHERE FIND_IN_SET(pid, @pid) > 0 and @pid := concat(@pid, ',', id)UNioNSELECT id, name, pid  FROM dept WHERE FIND_IN_SET(id, @pid) > 0 ORDER BY id;  
id  |name  |pid |----+------+----+1002|上海分公司 |1000|1005|北京市场部 |1001|1012|北京市场一部|1005|1013|上海研发部 |1002|1014|上海研发一部|1013|1015|上海研发二部|1013|

参考
https://www.cnblogs.com/guohu/p/14990788.html
https://wenku.baidu.com/view/6bb57f0e925f804d2b160b4e767f5acfa1c783cf.html?fr=income1-wk_app_search_ctr-search

来源地址:https://blog.csdn.net/u014786530/article/details/127300809

您可能感兴趣的文档:

--结束END--

本文标题: MySQL5.7 实现递归查询

本文链接: https://www.lsjlt.com/news/374797.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • MySQL5.7 实现递归查询
    创建测试环境 在线数据库 http://sqlfiddle.com/   1. 创建表 DROP TABLE IF EXISTS `dept`;CREATE TABLE `dept` ( `id` varchar(10) CH...
    99+
    2023-08-18
    数据库 mysql java
  • mysql5.7递归查询
    MySQL 5.7支持递归查询,这种查询方式可以在一个表中查找具有父子关系的数据。递归查询通常使用WITH RECURSIVE语句进行构造。这个语句使用两个部分:递归部分和终止部分。递归部分定义了递归查询的开始条件和递归关系,而终止部分定义...
    99+
    2023-09-09
    mysql 数据库 sql
  • mysql实现递归查询的方法
    小编给大家分享一下mysql实现递归查询的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql实现递归查询的方法:首先创建表,并初始化数据;然后向下递归,利用【find_in_set(...
    99+
    2024-04-02
  • MySQL中怎么实现递归查询
    本篇文章给大家分享的是有关MySQL中怎么实现递归查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Oracle 递归查询在 Oracle 中...
    99+
    2024-04-02
  • PostgreSQL中怎么实现递归查询
    本篇文章给大家分享的是有关PostgreSQL中怎么实现递归查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在内部,它是这样表示滴:&nbs...
    99+
    2024-04-02
  • SQL中怎么实现递归查询
    SQL中怎么实现递归查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 with cte as(selec&#...
    99+
    2024-04-02
  • sql server中怎么实现递归查询
    sql server中怎么实现递归查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。sql server 通过CTE来支持递归查询,这对查...
    99+
    2024-04-02
  • Mysql树形递归查询的实现方法
    前言 对于数据库中的树形结构数据,如部门表,有时候,我们需要知道某部门的所有下属部分或者某部分的所有上级部门,这时候就需要用到mysql的递归查询 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇...
    99+
    2024-04-02
  • PL/SQL中的递归查询怎么实现
    在PL/SQL中,可以使用递归函数来实现递归查询。递归函数是指在函数内部调用自身的函数。 以下是一个示例,演示了如何在PL/SQL中...
    99+
    2024-05-08
    PL/SQL
  • MongoDB中怎么使用$graphLookup实现递归查询
    在MongoDB中使用$graphLookup实现递归查询需要以下步骤: 创建一个包含引用关系的集合(例如,一个包含父子关系的集...
    99+
    2024-04-19
    MongoDB
  • MySQL实现递归查询的方法有哪些
    MySQL中实现递归查询的方法有以下几种:1. 使用存储过程:可以在存储过程中使用递归的方式进行查询。在每次递归调用时,将查询到的结...
    99+
    2023-09-11
    MySQL
  • MySQL递归查询的3种实现方式实例
    目录1.建表脚本1.1.建表2.递归查询三种实现方式2.1. 方式一 创建自定义函数实现递归查询2.1.1. 查询子节点的函数 查询时  包含自身 2.1.2. ...
    99+
    2024-04-02
  • oracle递归查询所有子节点怎么实现
    实现Oracle递归查询所有子节点可以通过使用CONNECT BY子句来实现。CONNECT BY子句用于在查询结果中递归地查找子节...
    99+
    2024-04-09
    oracle
  • sqlserver中怎么实现树形结构递归查询
    本篇文章为大家展示了sqlserver中怎么实现树形结构递归查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。公用表表达式(CTE),是一个在查询中定义的临时命名结...
    99+
    2024-04-02
  • java递归查询所有子节点怎么实现
    在Java中,可以使用递归来查询所有子节点。具体实现如下: 首先,创建一个树节点类,包含一个值和一个子节点列表: class Tre...
    99+
    2023-10-25
    java
  • Oracle递归查询connect by用法
    目录一、概述1、层级查询的基本语法:二、使用1、基本用法2、SYS_CONNECT_BY_PATH() 函数3、CONNECT_BY_ISLEAF 伪列4、CONNECT_BY_RO...
    99+
    2024-04-02
  • Oracle递归查询简单示例
    目录1 数据准备2 start with connect by prior递归查询2.1 查询所有子节点2.2 查询所有父节点2.3 查询指定节点的,根节点2.4 查询巴中市下行政组织递归路径3 with递归查询3.1 ...
    99+
    2024-04-02
  • Oracle递归查询树形数据
    概述 实际生活有很多树形结构的数据,比如公司分为多个部门,部门下分为多个组,组下分为多个员工;省市县的归属;页面菜单栏等等。 如果想查询某个节点的父节点或者子节点,一般通过表自身连接完成,但如果该节点...
    99+
    2023-09-07
    oracle mysql sql
  • Mysql8.0递归查询的简单用法
    这篇文章主要介绍“Mysql8.0递归查询的简单用法”,在日常操作中,相信很多人在Mysql8.0递归查询的简单用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Mysql8.0递归查询的简单用法”的疑惑有所...
    99+
    2023-06-20
  • Oracle递归查询树形数据实例代码
    目录概述1、数据准备2 start with connect by prior递归查询2.1 查询所有子节点2.2 查询所有父节点2.3 查询指定节点的根节点2.4 查询下行政组织递归路径3 with递归查询3.1 wi...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作