MySQL通过SQL语句进行递归查询

这里主要是针对于MySQL8.0以下版本,因为MySQL8.0版本出来了一个WITH RECURSIVE函数专门用来进行递归查询的

先看下表格数据,就是很普通的树结构数据,通过parentId关联上下级关系

在这里插入图片描述

下面我们先根据上级节点id递归获取所有的下级节点数据,比如id为1

SELECT T2.id, T2.parent_id, T2.name
FROM (SELECT @r AS _id, (SELECT @r := id FROM t_test WHERE parent_id = _id LIMIT 1) AS idFROM (SELECT @r := 1) vars,t_test h WHERE @r IS NOT NULL
) T1 
JOIN t_test T2 ON T1._id = T2.parent_id
ORDER BY T2.id;

执行一下,可以看到可以获取到下级节点所有的数据

在这里插入图片描述

这里有个问题就是没有拿到当前节点数据,我们改一下

SELECT T2.id, T2.parent_id, T2.name
FROM (SELECT @r AS _id, @r := (SELECT id FROM t_test WHERE parent_id = _id LIMIT 1) AS idFROM (SELECT @r := 1) vars,t_testWHERE @r IS NOT NULL) T1 
JOIN t_test T2 
ON T1._id = T2.parent_id OR T1._id = T2.id
ORDER BY T2.id;

运行一下
可以发现虽然拿到了当前节点,但是也出现了重复数据问题,目前还没想好要怎么改,所以只能在外层接收数据的时候处理,或者再套一层group by一下

在这里插入图片描述

还有根据子节点查询所有上级节点的

SELECT T2.id, T2.parent_id, T2.name
FROM (SELECT @r AS _id, (SELECT @r := parent_id FROM t_test WHERE id = _id) AS parent_idFROM (SELECT @r := 5) vars,t_test h WHERE @r <> 0) T1 JOIN t_test T2 ON T1._id = T2.id

执行一下

在这里插入图片描述

如果只想要顶层的

SELECT T2.id, T2.parent_id, T2.name
FROM (SELECT @r AS _id, (SELECT @r := parent_id FROM t_test WHERE id = _id) AS parent_idFROM (SELECT @r := 5) vars,t_test h WHERE @r <> 0) T1 JOIN t_test T2 ON T1._id = T2.id
ORDER BY T2.id LIMIT 1;

运行一下

在这里插入图片描述

最后告诫大家一点,使用递归一定要小心小心再小心,特别是在SQL里面递归,一旦因为数据问题等导致无限循环就麻烦了,所以使用一定要慎重

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

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

相关文章

Jenkins 节点该如何管理?

Jenkins 拥有分布式构建(在 Jenkins 的配置中叫做节点)&#xff0c;分布式构建能够让同一套代码在不同的环境(如&#xff1a;Windows 和 Linux 系统)中编译、测试等 Jenkins 的任务可以分布在不同的节点上运行 节点上需要配置 Java 运行时环境&#xff0c;JDK 版本大于 1.5 节…

代码随想录算法训练营第day16|104.二叉树的最大深度 559.n叉树的最大深度、111.二叉树的最小深度、 222.完全二叉树的节点个数

104.二叉树的最大深度 559.n叉树的最大深度在 这几道题完全可以用二叉树层序遍历做&#xff0c;具体实现参考上一篇文章代码随想录算法训练营第day15|二叉树层序遍历、 226.翻转二叉树 ●、101.对称二叉树 2-CSDN博客

2024春招算法打卡-腾讯WXG

大数相乘 class Solution {public String multiply(String num1, String num2) {String ZERO_STR "0";String ONE_STR "1";// 其中一个为0直接返回0if(ZERO_STR.equals(num1) || ZERO_STR.equals(num2)){return ZERO_STR;}// 其中一个为1直接返回另一…

JAVA学习-IO.输入输出流

Java的输入输出流&#xff08;IO&#xff09;是用于与外部设备&#xff08;如文件、网络连接等&#xff09;进行数据交互的机制。IO流是Java中处理输入和输出的一种方式&#xff0c;它以流的方式来读取输入或写入输出。 Java的IO库包括了多个输入输出流类&#xff0c;常见的输入…

C语言-写一个简单的Web服务器(一)

基于TCP的web服务器 概述 C语言可以干大事&#xff0c;我们基于C语言可以完成一个简易的Web服务器。当你能够自行完成web服务器&#xff0c;你会对C语言有更深入的理解。对于网络编程&#xff0c;字符串的使用&#xff0c;文件使用等等都会有很大的提高。 关于网络的TCP协议在…

算法练习第十七天| 110.平衡二叉树 、 257. 二叉树的所有路径、 404.左叶子之和 [主要使用递归的方式]

110.平衡二叉树 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode() {}* TreeNode(int val) { this.val val; }* TreeNode(int val, TreeNode left, TreeNode right) {* …

zookeeper Study

zk介绍&#xff1b;一种分布式协调服务。 分布式锁&#xff0c;集群选举&#xff0c;数据同步 。 zk都能进行操作&#xff0c;redis&#xff0c;kafka&#xff0c;rabbitmq&#xff0c;都能够用zk做协调管理服务。关键时zk简单操作。 应用说明&#xff1a; 简单介绍一下流程 &…

芯片工程系列(2)传统封装(引线键合与裸片贴装)

英文缩写 Die&#xff1a;即为wafer上切割出来的芯片Wire Bonding&#xff1a;引线键合Dicing&#xff1a;晶圆切割Bias voltage&#xff1a;偏压lead frame&#xff1a;引线框架First Bond&#xff1a;一次键合Second Bond&#xff1a;二次键合PCB&#xff1a;印制电路板&…

JMH287亲测【鸣潮】一键内测风景端V1.0.2已整理并录制视频教学

资源介绍&#xff1a; 否需要虚拟机&#xff1a;否 文件大小&#xff1a;压缩包约15G 支持系统&#xff1a;win7、win10、win11 硬件需求&#xff1a;运行内存16G 4核及以上CPU独立显卡 资源截图&#xff1a; 下载地址&#xff1a; JMH287【鸣潮】一键端 [V1.0.2]

给攻击扫站惊喜大礼包,压缩文件空链接直接跳转50G大文件

给攻击扫站惊喜大礼包&#xff0c;压缩文件空链接直接跳转50G大文件 方法一 在 nginx 配置里加了个下载空连接 ZIP/RAR 等链接&#xff0c;直接跳转 50G 的大文件&#xff0c;正常链接不受影响 location ~ /(.*\.7z|.*\.zip|.*\.rar|.*\.tar|.*\.gz|.*\.tar\.gz)$ {if (!-f $re…

题解:CF1929C(Sasha and the Drawing)

题解&#xff1a;CF1929C&#xff08;Sasha and the Drawing &#xff09; 一、 理解题意 CF链接 洛谷链接 大佬syz带着 a a a 元来到赌场&#xff0c;赌场的规则如下&#xff1a; 对于每一轮&#xff0c;假设选手下注 y y y 元钱&#xff08; y y y 应正整数&#xff0c;并…

Java面试题分享

1、JAVA面试题分享 大家在找工作的的时候总是会看对应专业的面试题&#xff0c;java方面的更是层出不穷。 网络搜寻也很多&#xff0c;不知道看那个好。 我在这里分享我在找工作和平常会复习的一套面试题。 是之前在csdn的一个博主星球下载的。 里面包含了基础&#xff0c;集…

SpringMVC09、Ajax

9、Ajax 9.1、简介 AJAX Asynchronous JavaScript and XML&#xff08;异步的 JavaScript 和 XML&#xff09;。 AJAX 是一种在无需重新加载整个网页的情况下&#xff0c;能够更新部分网页的技术。 Ajax 不是一种新的编程语言&#xff0c;而是一种用于创建更好更快以及交互…

nodejs创建的‘无后缀‘文件Win11无法删除、无法修改后缀、360文件粉碎无法粉碎

版本信息 操作系统版本&#xff1a;win11nodejs&#xff1a;v14.16.0 场景&#xff1a; 接收了base64格式数据字符串&#xff08;data:*/*;base64,xxxxxx就是这种样式的&#xff09;&#xff1b;要将其存储于本地。将字符串,号后的字符串转二进制写入本地。内容各种的都获取…

Spring Security的API Key实现SpringBoot 接口安全

Spring Security的API Key实现SpringBoot 接口安全 Spring Security 提供了各种机制来保护我们的 REST API。其中之一是 API 密钥。API 密钥是客户端在调用 API 调用时提供的令牌。 在本教程中&#xff0c;我们将讨论如何在Spring Security中实现基于API密钥的身份验证。 API…

CSP初赛备考—汉字与运算

汉字 英文字符 英文字符的编码有两种:①ASCII标准码,7位(128个字符)②ASCII扩展吗,8位(256个字符) 中文字符 汉字分为两级:①一级汉字:3755个,按汉语拼音字母的次序排列。②二级汉字:3008个,按偏旁部首排列。 那么,怎么编码呢?要使用区位码和字形码等等。 区…

Docker环境搭建和监控备份

1. 解释Docker中的容器和镜像的概念&#xff0c;并说明它们在环境搭建中的作用。 Docker中的容器和镜像是Docker最核心的概念&#xff0c;它们在环境搭建中扮演着至关重要的角色。 容器&#xff08;Container&#xff09;&#xff1a; 容器是Docker环境中用于运行应用的实体…

注意力机制网络

注意力机制在深度学习领域中是一种重要的技术&#xff0c;特别是在序列模型和自然语言处理&#xff08;NLP&#xff09;任务中。注意力机制的核心思想是在模型的输入上模拟人类的注意力过程&#xff0c;即模型能够自动决定在处理特定任务时应该“关注”输入数据的哪些部分。通过…

【UE5】游戏框架GamePlay

项目资源文末百度网盘自取 游戏框架 游戏 由 游戏模式(GameMode) 和 游戏状态(GameState) 所组成 加入游戏的 人类玩家 与 玩家控制器(PlayerController) 相关联 玩家控制器允许玩家在游戏中拥有 HUD&#xff0c;这样他们就能在关卡中拥有物理代表 玩家控制器还向玩家提供 …

在centos7系统中如何给docker配置代理

一、需求场景 生产环境私有云中&#xff0c;通常一个集群的机器中只有几台机器可以直接访问公网&#xff0c;其他机器需要通过代理的方式从能访问公网的机器出去&#xff0c;在已经做了如下配置之后&#xff0c;使用docker pull命令已经报错超时timeout&#xff0c;这时可以尝…