iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL 递归查询实践总结
  • 223
分享到

MySQL 递归查询实践总结

MySQL递归查询实践总结 2020-06-20 17:06:10 223人浏览 无得
摘要

MySQL复杂查询使用实例 By:授客 QQ:1033553122     表结构设计 SELECT id, `name`, parent_id FROM `tb_testcase_suite`         说明:

MySQL 递归查询实践总结

MySQL复杂查询使用实例

By:授客 QQ1033553122

 

 

表结构设计

SELECT id, `name`, parent_id FROM `tb_testcase_suite`

 

 

 

 

说明:

parent_id值关联表自身id列的值,如果其值为-1,则表示该记录不存在父级记录,否则表示该记录存在父级记录(假设parent_id值为5,则父级记录id为5),暂且把该记录自身称之为子记录,父级及父父级的记录称之为祖先记录,子级及子子级记录称之为后辈记录

 

查询需求

1) 根据指定记录的id,查询该记录关联的所有祖先记录,并按层级返回祖先记录name

2) 根据指定parent_id,查询其关联的的所有后辈记录id

查询实现

通过函数调用实现

1)根据指定记录的id,查询该记录关联的所有祖先记录,并按层级返回祖先记录name

# 向下递归

DROP FUNCTioN IF EXISTS queryChildrenSuiteIds;

DELIMITER ;;

CREATE FUNCTION queryChildrenSuiteIds(suiteId INT)

RETURNS VARCHAR(4000)

BEGIN

DECLARE childSuiteIds VARCHAR(4000);

DECLARE parentSuiteIds VARCHAR(4000);

 

SET childSuiteIds="";

SET parentSuiteIds = CAST(suiteId AS CHAR);

 

WHILE parentSuiteIds IS NOT NULL DO

    SET childSuiteIds= CONCAT(parentSuiteIds, ",", childSuiteIds);

    SELECT GROUP_CONCAT(id) INTO parentSuiteIds FROM tb_testcase_suite WHERE FIND_IN_SET(parent_id, parentSuiteIds)>0;

END WHILE;

RETURN childSuiteIds;

END

;;

DELIMITER ;

 

 

# 调用

SELECT queryChildrenSuiteIds(5);

 

 

 

 

2)根据指定parent_id,查询其关联的的所有后辈记录id

 

# 向上递归

DROP FUNCTION IF EXISTS querySuitePath;

DELIMITER ;;

CREATE FUNCTION querySuitePath(suiteId INT)

RETURNS VARCHAR(21845)

BEGIN

DECLARE suitePath VARCHAR(21845);

DECLARE parentId INT;

DECLARE suiteName VARCHAR(4000);

 

SET suitePath="";

SET suiteName = "";

SET parentId = NULL;

 

 

SELECT parent_id, `name` INTO parentId, suiteName FROM tb_testcase_suite WHERE id = suiteId;

WHILE parentId <>0 DO

    SET suitePath = CONCAT(suiteName, "/", suitePath);

   

    # 以下两行代码很关键 # 查询结果为空时,不会执行select ...into...这个赋值操作,导致parentId一直取最后一次查到的非0值,进而导致死循环   

    SET suiteId = parentId;

    SET parentId = 0;

   

    SELECT parent_id, `name` INTO parentId, suiteName FROM tb_testcase_suite WHERE id = suiteId;

END WHILE;

RETURN CONCAT("/", suitePath);

END

;;

DELIMITER ;

 

# 调用

SELECT querySuitePath(5);

 

 

SELECT id, querySuitePath(id), `name`, parent_id FROM `tb_testcase_suite`

 

 

 

您可能感兴趣的文档:

--结束END--

本文标题: MySQL 递归查询实践总结

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

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

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

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

下载Word文档
猜你喜欢
  • Java 递归查询部门树形结构数据的实践
    说明:在开发中,我们经常使用树形结构来展示菜单选项,如图: 那么我们在后端怎么去实现这样的一个功能呢? 1、数据库表:department 2、编写sql映射语句 &...
    99+
    2024-04-02
  • mysql实现递归查询的方法
    小编给大家分享一下mysql实现递归查询的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!mysql实现递归查询的方法:首先创建表,并初始化数据;然后向下递归,利用【find_in_set(...
    99+
    2024-04-02
  • MySQL中怎么实现递归查询
    本篇文章给大家分享的是有关MySQL中怎么实现递归查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Oracle 递归查询在 Oracle 中...
    99+
    2024-04-02
  • SQL的递归查询子/父节点结构(MySQL)
    当数据库中存储了树型结构的数据,例如城市表时,我们要搜索一个城市的所有父级城市或所有的子级城市,首先想到的就是利用SQL的递归查询,来看下面的MySQL例子(下列例子MySQL只适用于8.0版本及以上): 下载SQL,执行 表结构和数据S...
    99+
    2023-08-17
    sql 数据库 mysql
  • mysql递归查询树形结构怎么应用
    在MySQL中实现递归查询树形结构可以使用递归查询语句(Recursive Query Statement)或者使用存储过程来实现。...
    99+
    2023-10-25
    mysql
  • 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的递归查询 最近在做项目迁移,Oracle版本的迁到Mysql版本,遇...
    99+
    2024-04-02
  • sqlserver中怎么实现树形结构递归查询
    本篇文章为大家展示了sqlserver中怎么实现树形结构递归查询,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。公用表表达式(CTE),是一个在查询中定义的临时命名结...
    99+
    2024-04-02
  • 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
  • MySQL递归查询的方法有哪些
    在MySQL中,可以使用以下方法来实现递归查询: 使用存储过程:可以通过编写存储过程来实现递归查询。存储过程可以递归地调用自身来...
    99+
    2024-04-30
    MySQL
  • mysql怎样递归查询所有数据
    小编给大家分享一下mysql怎样递归查询所有数据,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!mysql递归查询所有数据的方法:...
    99+
    2024-04-02
  • MySQL数据库的递归查询with recursive
    原因:         当我们在实际的开发流程中,我们会遇到需要递归查询的一些数据,例如:课程分类表是一个树型结构,其中parentid字段为父结点ID,它是树型结构的标志字段。 如果树的层级固定可以使用表的自链接去查询,比如:我们只查询两...
    99+
    2023-09-08
    sql 数据库
  • PostgreSQL中怎么实现递归查询
    本篇文章给大家分享的是有关PostgreSQL中怎么实现递归查询,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。在内部,它是这样表示滴:&nbs...
    99+
    2024-04-02
  • SQL中怎么实现递归查询
    SQL中怎么实现递归查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 with cte as(selec&#...
    99+
    2024-04-02
  • 尾递归详细总结分析
    一. 尾递归与Continuation递归与尾递归关于递归操作,相信大家都已经不陌生。简单地说,一个函数直接或间接地调用自身,是为直接或间接递归。例如,我们可以使用递归来计算一个单向...
    99+
    2022-11-15
    尾递归
  • sql server中怎么实现递归查询
    sql server中怎么实现递归查询,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。sql server 通过CTE来支持递归查询,这对查...
    99+
    2024-04-02
  • 怎么在Oracle中实现递归树形结构查询功能
    这篇文章给大家介绍怎么在Oracle中实现递归树形结构查询功能,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。oracle树状结构查询即层次递归查询,是sql语句经常用到的,在实际开发中...
    99+
    2024-04-02
  • MySQL数据库查询之多表查询总结
    目录多表关系表与表之间的联系:一对多(多对一)多对多一对一多表查询多表查询的分类1.连接查询:2.子查询内连接外连接自连接联合查询子查询标量子查询列子查询行子查询表子查询多表查询案例...
    99+
    2022-11-13
    mysql多表查询语句 mysql多表连接查询方式 mysql多表查询面试题
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作