MySQL使用递归存储过程实现树状结构,实现Oracle的Connect By 功能

MySQL使用递归存储过程实现树状结构,实现Oracle的Connect By 功能在Mysql中如何实现Oracle中的递归 select * from (select * from tbl_menu where 1=1          coltype in ('NEWS','IMAGE','DOWN')          state  = #state#          state  = #state#          siteroot = #siteroot#      )  sta 阅读详情


1 创建一个数据表 
  1. CREATE TABLE `tree` (  
  2.   `id` int(10) NOT NULL,  
  3.   `fid` int(10) NOT NULL  
  4. );  

id 是编号 
fid 是上级编号, 顶层是0或者你自己定义 

2 创建临时表 
create temporary table if not exists  tmp_table(id bigint(20),fid bigint(20),lvl int)// 

3 编写存储过程 
  1. DELIMITER //  
  2. drop procedure if exists  useCursor //  
  3. -- 建立存储过程   
  4. -- JAVA世纪网 <a target="_blank" href="www.java2000.net">www.java2000.net</a> 老紫竹  
  5. CREATE PROCEDURE useCursor(iid bigint(20),lvl int)  
  6.     BEGIN                   
  7.          -- 局部变量定义  
  8.          declare tid bigint(20) default -1 ;  
  9.          declare tfid bigint(20) default -1 ;  
  10.            
  11.          -- 游标定义  
  12.          declare cur1 CURSOR FOR select id,fid from tree where fid=iid ;  
  13.            
  14.          -- 游标介绍定义  
  15.          declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tid = null,tfid=null;  
  16.   
  17.                  SET @@max_sp_recursion_depth = 10;  
  18.                             
  19.          -- 开游标  
  20.          OPEN cur1;  
  21.          FETCH cur1 INTO tid,tfid;  
  22.   
  23.          WHILE ( tid is not null )   
  24.          DO  
  25.           insert into tmp_table values(tid,tfid,lvl);  
  26.           -- 树形结构数据递归收集到建立的临时表中  
  27.           call useCursor(tid,lvl+1);  
  28.           FETCH cur1 INTO tid,tfid ;  
  29.        END WHILE;  
  30.     END;//  
  31. DELIMITER ;  



4 调用方式,并删除临时表 

call useCursor(2,0); 
select * from tmp_table ; 

5 删除临时表 
drop temporary table if  exists  tmp_table ; 


6 运行效果 
数据内容 


运行结果 

MySQL中进行树状所有子节点的查询 在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 但很多时候我们 阅读详情

相关推荐

PostgreSQL使用 pg_rman物理备份搭建流复制备库(streaming replication standby)

摘要:使用pg_rman备份搭建PostgreSQL流复制备库 本文详细介绍了利用pg_rman工具快速搭建PostgreSQL流复制备库的完整流程。该方法结合物理备份的高效性和流复制的实时性,特别适合大型数据库环境。主要内容包括:主库上的pg_rman安装配置、全量备份操作;备份文件传输至备库;备库数据目录准备及恢复;流复制参数配置;以及最终的启动验证步骤。文章还提供了架构示意图和关键配置示例,并包含常见问题排查建议,如备库无法启动或复制卡顿情况的处理方法。整个流程强调通过.pgpass文件管理密码的安全

liumangtuzi888的博客 1169

mysql树遍历存储过程_mysql存储过程递归调用发作树数据_mysql

使用finereport的树下拉框时,要求提供有层次结构的数据。例如:一级001,二级001001,三级001001001 等。而我们一般的递归表是这样的,定义一个id和一个pid,id和pid在长度上没有父子关系。这样的数据,finereport是不认的。故只能通过存储过程进行转换。 代码如下: SET FOREIGN_KEY_CHECKS=0; -- ------------------...

weixin_42394785的博客 194

ADS入门学习笔记——射频振荡器的设计

振荡器是射频系统中的基本部件之一,可以将直流功率转换为射频功率,在特定的频率点建立起稳定的正弦振荡,成为所需的射频信号源。

weixin_42126696的博客 8952

java递归实现树形结构数据

java递归实现树形结构数据

陈小翔的博客 1万+

LCD工程师必看:Pixelclock、Mipi Clk计算全解析(附实用公式)

本文为LCD工程师详细解析了像素时钟(Pixelclock)与MIPI时钟(Mipi Clk)的核心计算方法。文章从时序参数构成入手,通过实战公式推导,系统阐述了从屏幕分辨率、刷新率到最终MIPI速率的高效计算链路,并提供了实用的调试思路与排查清单,帮助工程师快速解决画面撕裂、闪烁等常见问题。

weixin_29266679的博客 393

YOLOv8剪枝 稀疏训练+slim剪枝测试精度仅掉1.6个点,速度提高10.3fps!

摘要 本文介绍了YOLOv8剪枝方法Slim(Network Slimming),通过L1正则化作用于BN层的缩放因子(γ),自动识别并剪除冗余通道,实现模型轻量化。核心步骤包括:稀疏训练(引入L1正则化)、通道剪枝(按γ阈值裁剪)、微调恢复精度。实验表明,该方法能有效压缩模型大小、减少计算量,且支持通过调整speed_up等超参数控制剪枝强度。移植代码需修改C2F模块以适配剪枝,并配置稀疏训练参数(如reg、sl_epochs)。最终剪枝模型需移除优化器以减小体积,但不支持多卡训练。

FJN110的博客 862

mysql8 实现connect by语法

mysql8 已只吃connect by语法

nayi_224的博客 2万+

机器人控制基础:伺服驱动电机 PID 参数自适应控制的实现方法及研究

伺服电机PID参数自适应控制技术研究 摘要:针对伺服驱动电机在动态负载工况下传统PID控制性能下降的问题,本文研究了多种自适应控制方法。通过分析6种主流技术(包括模型参考自适应、模糊逻辑、神经网络等)的原理、实现步骤及适用场景,揭示了负载感知精度、参数调节实时性和系统稳定性三大技术难点,并提出了相应解决方案。以模糊自适应PID为例的实验验证表明,该技术能有效提升伺服系统在变负载条件下的控制性能。研究为工业应用中伺服电机的精确控制提供了重要参考。

start_up_go的博客 829

MySQL实现递归查询的4中方案,与Oracel中CONNECT BY 和 START WITH子句实现效果一致

Oracle中有CONNECT BY 和 START WITH实现递归查询,MySQL中的对等解决方案

m0_55106953的博客 7834

【SMPL简介】SMPL: A Skinned Multi-Person Linear Model【源码复现】

SMPL是一种3D人体建模方法.在数字人或者人物角色三维重建领域有着广泛应用支持人体的各种形状及动作可以简单理解为通过训练获取的人物模型SMPL 输入是:姿态shape vectorβ\betaβ+ 影响动作Pose的参数θ\thetaθ输出是: 各种变化后vertex顶点的数据作者:Loper, Matthew and Mahmood, Naureen and Romero, Javier and Pons-Moll, Gerard and Black, Michael J.

zik的博客 3369

YOLOv11改进 - 卷积Conv | PATConv(Partial Attention Convolution)部分注意力卷积,在减少计算量的同时融合卷积与注意力的优势 | AAAI 2026

本文提出部分注意力卷积(PATConv)机制,并将其集成到YOLOv11中。传统神经网络中,卷积计算密集,注意力机制全局计算冗余,此前的“部分卷积”会丢失未计算通道的特征价值。PATConv通过“通道拆分 - 并行处理 - 结果拼接”的逻辑,给不同通道分配“擅长的任务”,兼顾局部与全局特征。基于此,它还衍生出PAT_ch、PAT_sp和PAT_sf三种细分模块。此外,还提出了动态部分卷积(DPConv),并构建了新的混合网络家族PartialNet。我们将PATConv代码集成到YOLOv11中,实验表明,

魔改工程师的博客 1085

mysql start with递归_mysql 实现oracle start with connect by递归

在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。但很多时候我们无法控制树的深度。这...

weixin_26901145的博客 1399

【Autosar从入门到精通到进阶实战篇】75 0x34/0x36/0x37:请求下载、传输数据、请求退出——刷写流程的“三兄弟”

文章摘要:UDS刷写流程0x34/0x36/0x37关键实现要点 本文通过一个真实ECU变砖案例,揭示了UDS刷写服务(0x34请求下载、0x36传输数据、0x37请求退出)的实现陷阱与最佳实践。核心要点: 安全架构设计: 0x34阶段只协商参数,不立即擦除Flash 采用缓冲区暂存数据,避免频繁写Flash 严格检查地址对齐和内存边界 关键改进措施: 实现数据包序列号校验(防错位) 传输层缓冲区溢出保护 0x37阶段必须包含完整性校验(如CRC32) 一次性批量写入Flash,减少擦写次数 典型错误模式:

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 72

mysql 实现oracle start with connect by递归

在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。 在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。 ...

556

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

mysql6支持connect by_mysql 实现oracle start with connect by递归

在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY 我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过left join 来实现。但很多时候我们无法控制树的深度。这...

weixin_34730055的博客 301

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Oracle中start with connect by的递归查询

语法: select … from tablename start with 条件1 connect by 条件2 where 条件3; 通过这个语句,能查询出树状结构的数据 条件1 是起始条件,限定树结构的起始节点 条件2 是连接条件,设置递归的条件 条件3 是过滤条件,对所有返回的数据进行过滤 行政区划表 xzqh 1、查南京市及以下的地区 select DM, MC...

ConstXiong 644

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

mysql 3层树状结构_mysql中递归树状结构<转>

在Oracle 中我们知道有一个 Hierarchical Queries 通过CONNECT BY我们可以方便的查了所有当前节点下的所有子节点。但很遗憾,在MySQL的目前版本中还没有对应的功能。在MySQL中如果是有限的层次,比如我们事先如果可以确定这个树的最大深度是4, 那么所有节点为根的树的深度均不会超过4,则我们可以直接通过leftjoin来实现。但很多时候我们无法控制树的深度。这时就需...

weixin_39797780的博客 539

递归CTE基本用法(Mysql、Oracle查询树状结构的结点数据)

1、太长不看版: 数据库经常存在这样一种带父子节点的数据集: id name score parent_id 1 A 11 null 2 B 22 null 3 C 33 1 4 D 44 3 5 E 55 2 6 F 66 3 7 G ...

SKY_02的博客 3373

Oracle CONNECT BY (层级查询)的用法记录

前两天在写SQL的时候 无意间发现这样一条语句 我得天呐 我都惊讶了 还能这样搞的 以前用MYSQL的时候 像菜单这种层级查询的话还要去查询每一条 然后再进行一个递归 封装 麻烦的一* Oracle竟然一条语句就搞定了 这不赶紧偷过来 (奇怪 读书人的事怎么能叫偷呢) select CONNECT_BY_ROOT(字段) 根节点,level 层级,connect_by_isleaf 是否叶子节点 from table_name t START WITH [条件(以哪个节点开始)] CONN.

风华流沙君莫笑的博客 1238

mysql if startwith_Oracle中connect by...start with...的使用

一、语法 大致写法:select * from some_table [where 条件1] connect by [条件2] start with [条件3]; 其中 connect by 与 start with 语句摆放的先后顺序不影响查询的结果,[where 条件1]可以不需要。 [where 条件1]、[条件2]、[条件3]各自作用的范围都不一、语法大致写法:select * from ...

weixin_39719165的博客 304

mysql 存储过程实现 oracle START WITH CONNECT BY

[color=green]oracle树查询[/color] [code="sql"]SELECT R.RESOURCE_ID,R.RESOURCE_NAME,R.RESOURCE_URL,R.RESOURCE_TYPE,R.CREATE_TIME,R.STATUS ,RS.RESOURCE_STRUCTURE_ID,RS.RESOURCE_LEVEL,RS.PARENT_RESOURCE...

学习空间...吧 583

mysql或者oracle递归查询部门层级

mysql递归查询部门层级

吃黄瓜不蘸酱的博客 1739

在ORACLE、MSSQL、MYSQL中树结构表递归查询的实现方法

表recursion数据如下:id       name       parentid1       食品分类     -12       肉类              13       蔬菜类          14       产品分类     -15       保健品          46       医药              47       建筑              4

人生只有走出来的美丽,没有等出来的辉煌! 2305

oracle中 connect by prior 递归算法

Oracle中start with...connect by prior子句用法 connect by 是结构化查询中用到的,其基本语法是:  select ... from tablename start with 条件1  connect by 条件2  where 条件3;  例:  select * from table  start with org_id = 'HBHqfW

andybbc的博客 421

树查询,递归查询,子节点查询整理

看到的另一个函数 和下面的 原理一样 https://www.cnblogs.com/chywx/p/9420726.html create table `nodelist` ( `id` int (11), `nodecontent` varchar (300), `pid` int (11) ); insert into `nodelist` (`id`, `nodecontent`, `pid`) values('1','a',NULL); insert into `

qq120631157的博客 1754
上一篇: 胜与败有区别吗?有感于中文的深奥!
下一篇: 我的2008,暨入驻优快云一周年总结
老紫竹
博客等级 码龄19年 1万+粉丝 1252原创
评论 12
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值