Mysql自定义变量在递归遍历中的妙用

news2024/12/22 19:20:25

借着在解决一个递归查询父目录的问题,学习了一下mysql变量的用法,在某些场景下这种解法还是比较有特效的,下面具体来聊一下场景,同时也会详细分析下mysql自定义变量的用法

场景:
获取从树的根节点到叶子节点的全路径(表现形式任意,本文以父目录-子目录为一条记录的形式逐条展示)

树节点层次结构具体:
aaaa
|--aaaabbbb
   |--aaaabbbbcccc
       |--aaaabbbbccccdddd

原表结构
 

预期mysql结果:

 

解决方案:

SELECT 
    t2.id, t2.node_name, t2.parent_node_id 
FROM 
(
    SELECT 
        @supId AS tempId,
        (SELECT @supId := parent_node_id FROM test_node WHERE id = tempId) AS supId, 
        @level := @level + 1 AS lvl 
    FROM 
        (SELECT @supId := aaaabbbbccccdddd, @level := 0) vars,test_node 
    WHERE 
        @supId <> 0 OR @supId <> -1
)  t1 
JOIN 
    (SELECT * FROM test_node WHERE deleted = 0) t2 
ON 
    t1.tempId = t2.id 
ORDER BY t1.lvl DESC

说明:
1、首先设定了两个临时变量 @supId,@level用来记录当前查询需要的父节点id和层次数
   对应语句:(SELECT @supId := aaaabbbbccccdddd, @level := 0) vars
2、根据上次结果的变量获取新的记录,拿到id=@supId的记录(条件id=tempId),同时将新的记录的parent_node_id赋值给@supId,@level+1赋值给@level
然后继续查询
3、循环2的过程,直至结束
4、再与外围的t2表join,获取最终结果

总结
使用自定义变量基本就两点
1、在from后初始化
2、select后赋值以及使用,赋值一般都是在select后再来一个select2,使用就是用的这个select2形成的表记录

本文主要参考文章:mysql自定义变量的妙用 - 墨天轮

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

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

相关文章

图解基于UDS的Flash BootLoader

图解基于UDS的Flash BootLoader一、为什么要搞Bootloader&#xff1f;为什么要基于UDS搞Bootloader二、Bootloader应支持的UDS服务三、Bootloader——三段式(1) 预编程阶段(2) 主编程阶段(3)后编程状态四、BootLoader的启动顺序与转换流程五、问题点疑问点 Q:图中的烧写顺序是…

点云 3D 目标检测 - RangeDet(ICCV 2021)

点云 3D 目标检测 - RangeDet&#xff08;ICCV 2021&#xff09;摘要1. 引言2. 相关工作3. 距离视图表示的回顾4. 方法4.1 距离条件金字塔4.2 元核卷积4.3 加权非最大抑制4.4 距离视图中的数据增强4.5 体系结构5. 实验5.1 元核卷积的研究5.2 距离条件金字塔的研究5.3 加权非最大…

基于android的有声听书系统

需求信息&#xff1a; 1&#xff1a;注册登录&#xff1a;未注册用户首先进行账号注册&#xff0c;注册成功后进行登录&#xff0c;已注册用户直接输入账号密码进行登录&#xff0c;登录成功后进入主页面。 2&#xff1a;主页面&#xff1a;通过左右滑动可以实现对推荐界面、订…

Activity7工作流介绍_和BPM语言介绍---工作流工作笔记003

只说经典,重要的部分,节省学习时间,用最快的速度学习掌握 看一个简单审批流程,要知道工作流是基于状态驱动的,就是比如,状态有: 0 已创建 1 已提交 2 已部门经理审核 3 已总经理审核 4 审核通过 5 审核拒绝 根据这些状态来做驱动. 这里需要用到流程引擎,常见的比如有Drools规…

不看后悔,一文入门Go云原生微服务

文章目录打好基础微服务框架对比简单横评各个框架微服务概念软件架构演进史简单理解微服务的好处go-micro概述构成组件Go MicroAPISidecarWebCLIBot总结Go Micro组件架构Registry注册中心Selector负载均衡Broker事件驱动&#xff1a;发布订阅Transport消息传输总结快速入门准备…

使用Java8优化模板方法模式

目录 前言 以前的模板方法 Java 8 的函数式编程 Java 8以后的模板方法 总结 前言 我们在日常开发中&#xff0c;经常会遇到类似的场景&#xff1a;当要做一件事儿的时候&#xff0c;这件事儿的步骤是固定好的&#xff0c;但是每一个步骤的具体实现方式是不一定的。 通…

网络 随笔 2-linux的三种网络模式

0. 前面的科普对操作系统网络的理解还有帮助的 简单点&#xff0c;linux三种网络模式 linux中的三种网络模式 1. bridge 物理网卡使用虚拟网桥作为虚拟交换机的输入物理机以及虚拟网卡接入这个虚拟交换机虚拟网卡与物理网卡处于一个网段下(网关与DNS 一致) 2. NAT 虚拟的N…

删除的文件怎么恢复?误删文件恢复,就使用这些方法!

电脑里面保存着很多文件&#xff0c;为了让电脑更整洁&#xff0c;我们一般都会定期清理不必要的数据。在清理过程中&#xff0c;出现文件被误删&#xff0c;我们该怎么办&#xff1f;误删文件恢复&#xff0c;方法就看下面三个&#xff1a;注册表恢复、回收站恢复、软件恢复。…

一场晚会直播背后的安全攻防

多姿多彩的数字世界中&#xff0c;“直播”扮演了不可或缺的角色。刚刚结束的央视春晚&#xff0c;腾讯和中央广播电视总台一起打造了“竖屏春晚HDR及菁彩声”技术方案&#xff0c;并在“央视频”客户端上线。让广大用户“听”得更沉浸&#xff0c;“看”得更清晰。总台首次使用…

无刷电机驱动器

0.0参考&#xff1a; FOC?看这篇文章就够了 志辉君——【自制FOC驱动器】深入浅出讲解FOC算法与SVPWM技术 SPWM基本原理详解&#xff08;图文并茂公式推导C程序实现&#xff09; 1、开源的FOC方案 1、SmipleFOC是比较常见的无刷驱动方案&#xff0c;因为其便宜的制造成本…

高级Spring之Scope 详解

在当前版本的 Spring 和 Spring Boot 程序中&#xff0c;支持五种 Scope singleton&#xff0c;容器启动时创建&#xff08;未设置延迟&#xff09;&#xff0c;容器关闭时销毁 prototype&#xff0c;每次使用时创建&#xff0c;不会自动销毁&#xff0c;需要调用 DefaultList…

使用Plotly和Python进行交互式数据可视化

使用Plotly和Python进行交互式数据可视化 Python是数据探索和数据分析的好帮手&#xff0c;这都要归功于numpy、pandas、matplotlib等神奇库的支持。在我们的数据探索和数据分析阶段&#xff0c;理解我们正在处理的数据是非常重要的&#xff0c;为此&#xff0c;数据的可视化表…

Swin-Transformer算法解析

本文参考&#xff1a; SwinTransformer&#xff1a;使用shifted window的层级Transformer(ICCV2021)_tzc_fly的博客-CSDN博客 https://zhuanlan.zhihu.com/p/430047908 目录 1 为什么在视觉中使用Transformer 2 Swin-Transformer算法总体架构 3 Swin-Transformer Block详述…

C# 源码 等值线(等高线)云图绘制 ,图上含等高线数值

C# 源码 数据格式为XYZ数据&#xff0c;XY为坐标&#xff0c;Z为对应的值 X Y Z -0.671053 -0.850000 83.330742 -0.671053 -0.850000 85.469604 -0.671053 -0.760526 89.225899 -0.671053 -0.760526 86.994576 -0.671053 -0.760526 86.994576 -0.671053 -0.760526 89.225899 -…

【解读】《云事件响应框架》:云服务用户响应和管理事件首选指南

微信搜索”国际云安全联盟“&#xff0c;回复关键词“云事件”下载本报告 当今互联时代&#xff0c;全面的事件响应策略对于需要管理与降低风险的组织必不可少。然而&#xff0c;在基于云的基础设施和系统的事件响应策略方面&#xff0c;部分由于云的责任共担特性&#xff0c;…

sql的四种连接——左外连接、右外连接、内连接、全连接

一、内连接 满足条件的记录才会出现在结果集中。 二、 左外连接&#xff08;left outer join&#xff0c;outer可省略&#xff09; 左表全部出现在结果集中&#xff0c;若右表无对应记录&#xff0c;则相应字段为NULL 举例说明&#xff1a; 客户表&#xff1a; 订单表&#x…

2023年2月系统集成项目管理工程师认证【报名入口】

系统集成项目管理工程师是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目之一&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职…

Qt 根据参数 自动生成vs 工程

一&#xff0c;需求 给算法部门提供一套代码框架&#xff0c;让其写算法dll。为了使dll能融入主工程&#xff0c;其框架对格式有一定要求&#xff0c;为了增加算法部门的快发效率&#xff0c;因此开发一个小工具&#xff0c;用于自动生成这套框架。 运行后&#xff0c;只需要…

cdh+dolphinscheduler开启kerberos

搭建环境多台linux主机搭建集群CDH 6.3.2 (Parcel)版本dolphinscheduler 1.3.2版本本流程在CDH已搭建完成并可正常使用后&#xff0c;开启kerberos功能dolphinscheduler用于大数据任务管理与执行&#xff0c;是很不错的任务调度平台&#xff0c;是否提前部署均可开启kerberos目…

数据结构与算法:二叉树的学习

1.了解树形结构 1.概念 树是一种非线性的数据结构&#xff0c;它是由n&#xff08;n>0&#xff09;个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树&#xff0c;也就是说它是根朝上&#xff0c;而叶朝下的。它具有以下的特点&#xff1a; …