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))
begin
declare 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 )
do
truncate 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 select 1, 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)) begin declare 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()>0 do set 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
# 递归
# MySQL递归查询树状表的子节点、父节点具体实现
# SQL如何实现MYSQL的递归查询
# php+mysql不用递归实现的无限级分类实例(非递归)
# 使用递归删除树形结构的所有子节点(java和mysql实现)
# 使用函数递归实现基于php和MySQL的动态树型菜单
# 利用java+mysql递归实现拼接树形JSON列表的方法示例
# PHP递归写入MySQL实现无限级分类数据操作示例
# Mysql树形递归查询的实现方法
# 的是
# 不支持
# 可通过
# 中对
# 给个
# 中不
# 中学教师
# 高数
# 在同一
# union
# e60b8395f7d
# ce203ac
# e2ea0a
# null
# c877b7ea
# exists
# table
# test
# id
相关文章:
如何安全更换建站之星模板并保留数据?
建站主机选哪种环境更利于SEO优化?
制作营销网站公司,淘特是干什么用的?
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
海南网站制作公司有哪些,海口网是哪家的?
代购小票制作网站有哪些,购物小票的简要说明?
如何续费美橙建站之星域名及服务?
建站之星如何快速更换网站模板?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
北京的网站制作公司有哪些,哪个视频网站最好?
建站之星安装模板失败:服务器环境不兼容?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
建站之星×万网:智能建站系统+自助建站平台一键生成
建站之星代理如何优化在线客服效率?
,sp开头的版面叫什么?
高性能网站服务器部署指南:稳定运行与安全配置优化方案
教程网站设计制作软件,怎么创建自己的一个网站?
建站之星安全性能如何?防护体系能否抵御黑客入侵?
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
建站之星官网登录失败?如何快速解决?
建站之星代理商如何保障技术支持与售后服务?
上海网站制作网页,上海本地的生活网站有哪些?最好包括生活的各个方面的?
公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?
建站主机与服务器功能差异如何区分?
魔毅自助建站系统:模板定制与SEO优化一键生成指南
如何在云主机上快速搭建多站点网站?
成都网站制作报价公司,成都工业用气开户费用?
如何选择服务器才能高效搭建专属网站?
如何制作算命网站,怎么注册算命网站?
手机钓鱼网站怎么制作视频,怎样拦截钓鱼网站。怎么办?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
建站之星好吗?新手能否轻松上手建站?
如何在Golang中使用replace替换模块_指定本地或远程路径
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
手机怎么制作网站教程步骤,手机怎么做自己的网页链接?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
如何确认建站备案号应放置的具体位置?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
建站之星展会模版如何一键下载生成?
家庭服务器如何搭建个人网站?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
如何通过西部建站助手安装IIS服务器?
建站主机SSH密钥生成步骤及常见问题解答?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
c++怎么用jemalloc c++替换默认内存分配器【性能】
定制建站流程解析:需求评估与SEO优化功能开发指南
如何快速启动建站代理加盟业务?
*请认真填写需求信息,我们会在24小时内与您取得联系。