mysql 递归sql,SQL如何实现MYSQL的递归查询

搜索热词

众所周知,目前的MysqL版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句sql内实现树的递归查询的。这个得益于MysqL允许在sql语句内使用@变量。以下是示例代码。

创建表格

sql;">

CREATE TABLE `treenodes` (

`id` int,-- 节点ID

`nodename` varchar (60),-- 节点名称

`pid` int -- 节点父ID

);

插入测试数据

sql;">

INSERT INTO `treenodes` (`id`,`nodename`,`pid`) VALUES

('1','A','0'),('2','B','1'),('3','C',('4','D','2'),('5','E',('6','F','3'),('7','G','6'),('8','H',('9','I','8'),('10','J',('11','K',('12','L','9'),('13','M',('14','N','12'),('15','O',('16','P','15'),('17','Q',('18','R',('19','S',('20','T',('21','U','8');

查询语句

0,SUBSTRING_INDEX( SUBSTRING_INDEX(@pathlevel,CONCAT('|',-1),'|',1) +1,@le+1) ) levels,@pathlevel:= CONCAT(@pathlevel,id,':',@le,'|') pathlevel,@pathnodes:= IF( pid =0,',0',CONCAT_WS(',@pathall) > 0,SUBSTRING_INDEX( SUBSTRING_INDEX(@pathall,1),@pathnodes ),pid ) )paths,@pathall:=CONCAT(@pathall,@pathnodes,'|') pathall

FROM treenodes,(SELECT @le:=0,@pathlevel:='',@pathall:='',@pathnodes:='') vv

ORDER BY pid,id

) src

ORDER BY id

最后的结果如下:

ID 父ID父到子之间级数 父到子路径

------ ------ ---------------------------------------

1 0 0,0

2 1 1,1

3 1 1,1

4 2 2,1,2

5 2 2,2

6 3 2,3

7 6 3,3,6

8 0 0,0

9 8 1,8

10 8 1,8

11 8 1,8

12 9 2,8,9

13 9 2,9

14 12 3,9,12

15 12 3,12

16 15 4,12,15

17 15 4,15

18 3 2,3

19 2 2,2

20 6 3,6

21 8 1,8

以上就是一句sql实现MysqL的递归查询的实现全过程,希望对大家的学习有所帮助。

总结

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值