MySQL之递归小问题的示例分析
发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,这篇文章给大家分享的是有关MySQL之递归小问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。mysql本身不支持递归语法,但可通过自连接变相实现一些简单的递归,
千家信息网最后更新 2025年01月28日MySQL之递归小问题的示例分析
这篇文章给大家分享的是有关MySQL之递归小问题的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
mysql本身不支持递归语法,但可通过自连接变相实现一些简单的递归,本文主要介绍了MySQL之递归小问题,需要的朋友可以参考下,希望能帮助到大家。
--递归小方法:临时表和普通表的不同方法--这题使用的是2次临时表查询父节点的递归 drop table if exists test;create table test(id varchar(100),name varchar(20),parentid varchar(100));insert test select'13ed38f1-3c24-dd81-492f-673686dff0f3', '大学教师', '37e2ea0a-1c31-3412-455a-5e60b8395f7d' union all select '1ce203ac-ee34-b902-6c10-c806f0f52876','小学教师', '37e2ea0a-1c31-3412-455a-5e60b8395f7d' union all select '37e2ea0a-1c31-3412-455a-5e60b8395f7d', '教师' , null union all select 'c877b7ea-4ed3-f472-9527-53e1618cb1dc', '高数老师', '13ed38f1-3c24-dd81-492f-673686dff0f3' union all select 'ce50a471-2955-00fa-2fb7-198f6b45b1bd', '中学教师', '37e2ea0a-1c31-3412-455a-5e60b8395f7d'; delimiter $$ create procedure usp_ser(in idd varchar(100))begindeclare lev int;set lev=1;drop table if exists tmp1;drop table if exists tmp2;CREATE TEMPORARY TABLE tmp1(id varchar(100),name varchar(20),parentid varchar(100),levv int);CREATE TEMPORARY TABLE tmp2(pid varchar(100));insert tmp2 select parentid from test where id=idd;insert tmp1 select t.* , lev from test t join tmp2 a on t.id=a.pid; while exists(select 1 from tmp2 )dotruncate tmp2;set lev=lev+1;insert tmp2 select t.id from test t join tmp1 a on t.id=a.parentid and a.levv=lev-1;insert tmp1 select t.*,lev from test t join tmp2 a on t.id=a.pid;end while ;select id,name,parentid from tmp1;end;$$ delimiter ; call usp_ser('c877b7ea-4ed3-f472-9527-53e1618cb1dc');+--------------------------------------+----------+--------------------------------------+| id | name | parentid |+--------------------------------------+----------+--------------------------------------+| 13ed38f1-3c24-dd81-492f-673686dff0f3 | 大学教师 | 37e2ea0a-1c31-3412-455a-5e60b8395f7d || 37e2ea0a-1c31-3412-455a-5e60b8395f7d | 教师 | NULL |+--------------------------------------+----------+--------------------------------------+ call usp_ser('13ed38f1-3c24-dd81-492f-673686dff0f3');+--------------------------------------+------+----------+| id | name | parentid |+--------------------------------------+------+----------+| 37e2ea0a-1c31-3412-455a-5e60b8395f7d | 教师 | NULL |+--------------------------------------+------+----------+ call usp_ser('37e2ea0a-1c31-3412-455a-5e60b8395f7d'); Empty set (0.02 sec)
上面的方法因为由于MySQL中不允许在同一语句中对临时表多次引用,所以用2次临时表
下面给个一次性用普通表完成的 查询子节点的递归查询
核心代码
drop table if exists test;create table test(id INT,parentid INT);insert test select1, 0 UNION ALL SELECT 2, 1 UNION ALL SELECT 3, 1 UNION ALL SELECT 4, 0 UNION ALL SELECT 5, 2 UNION ALL SELECT 6, 5 UNION ALL SELECT 7, 3 ;Go delimiter $$ create procedure usp_ser(in idd varchar(100))begindeclare lev int;set lev=1;drop table if exists tmp1;CREATE TABLE tmp1(id INT,parentid INT ,levv INT,ppath VARCHAR(1000));INSERT tmp1 SELECT *,lev,id FROM test WHERE parentid=idd; while row_count()>0doset lev=lev+1;insert tmp1 select t.*,lev,concat(a.ppath,t.id) from test t join tmp1 a on t.parentid=a.id AND levv=LEV-1; end while ;SELECT * FROM tmp1; end;$$ delimiter ; call usp_ser(0); /*+------+----------+------+-------+| id | parentid | levv | ppath |+------+----------+------+-------+| 1 | 0 | 1 | 1 || 4 | 0 | 1 | 4 || 2 | 1 | 2 | 12 || 3 | 1 | 2 | 13 || 5 | 2 | 3 | 125 || 7 | 3 | 3 | 137 || 6 | 5 | 4 | 1256 |+------+----------+------+-------+*/
感谢各位的阅读!关于"MySQL之递归小问题的示例分析"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
递归
教师
问题
方法
查询
示例
分析
普通
内容
大学
更多
篇文章
节点
参考
帮助
不同
不错
实用
一次性
中学
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
小森生活显示当前服务器
关于网络安全的户外游戏
中国网络安全与信息产业奖
电视墙管理服务器
华为 服务器报价
网络安全综合实训总结
合肥体感软件开发
罗布勒斯国际服怎么进服务器
哪个大学是可以学软件开发的
epidata数据库建立
在线服务器怎么使用
中远集团服务的网络技术
华为服务器上看raid卡
计算机网络技术的基础理论
河北挑选软件开发配件
数据库到存储
数据库使用查询思维导图
数据库面试优缺点
科技大学互联网创新中心
售电平台软件开发协议
二手服务器怎么选择
数据库学号末尾数字怎么查询
对数据库中的数据进行统计
驻马店审计局网络安全
贴片厂小软件开发
罗布勒斯国际服怎么进服务器
美国定制软件开发公司
上海专业的进销存软件开发教程
数据库指向空文件
中新软件网络技术有限公司