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
相关文章:
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
如何在阿里云通过域名搭建网站?
如何获取上海专业网站定制建站电话?
c# 在高并发场景下,委托和接口调用的性能对比
历史网站制作软件,华为如何找回被删除的网站?
如何在服务器上三步完成建站并提升流量?
,石家庄四十八中学官网?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何获取免费开源的自助建站系统源码?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
如何高效搭建专业期货交易平台网站?
制作网站的基本流程,设计网站的软件是什么?
如何高效生成建站之星成品网站源码?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
网站制作免费,什么网站能看正片电影?
建站之星伪静态规则如何设置?
建站主机与虚拟主机有何区别?如何选择最优方案?
网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?
如何通过商城免费建站系统源码自定义网站主题?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何访问已购建站主机并解决登录问题?
成都响应式网站开发,dw怎么把手机适应页面变成网页?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
建站之星如何助力网站排名飙升?揭秘高效技巧
公司网站制作需要多少钱,找人做公司网站需要多少钱?
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
建站之星后台管理:高效配置与模板优化提升用户体验
ppt制作免费网站有哪些,ppt模板免费下载网站?
广东专业制作网站有哪些,广东省能源集团有限公司官网?
如何高效利用200m空间完成建站?
广州商城建站系统开发成本与周期如何控制?
常州自助建站:操作简便模板丰富,企业个人快速搭建网站
SQL查询语句优化的实用方法总结
如何撰写建站申请书?关键要点有哪些?
内部网站制作流程,如何建立公司内部网站?
上海制作企业网站有哪些,上海有哪些网站可以让企业免费发布招聘信息?
一键制作网站软件下载安装,一键自动采集网页文档制作步骤?
网站专业制作公司,网站编辑是做什么的?好做吗?工作前景如何?
建站之星上传入口如何快速找到?
如何在万网主机上快速搭建网站?
网站设计制作企业有哪些,抖音官网主页怎么设置?
南宁网站建设制作定制,南宁网站建设可以定制吗?
如何快速完成中国万网建站详细流程?
C++如何将C风格字符串(char*)转换为std::string?(代码示例)
如何挑选优质建站一级代理提升网站排名?
如何快速查询网站的真实建站时间?
建站之星与建站宝盒如何选择最佳方案?
购物网站制作公司有哪些,哪个购物网站比较好?
香港服务器网站推广:SEO优化与外贸独立站搭建策略
*请认真填写需求信息,我们会在24小时内与您取得联系。