首页 > 数据库技术 > 详细

mysql 8.0实现递归

时间:2019-05-21 18:31:46      阅读:223      评论:0      收藏:0      [点我收藏+]

借助mysql 8.0的cte,可以实现递归,如下:

+----+----------+--------------+
| ID | ParentID | name         |
+----+----------+--------------+
|  1 |        0 | 河南省       |
|  2 |        1 | 信阳市       |
|  3 |        2 | 淮滨县       |
|  4 |        3 | 芦集乡       |
|  5 |        1 | 安阳市       |
|  6 |        5 | 滑县         |
|  7 |        6 | 老庙乡       |
|  8 |        2 | 固始县       |
|  9 |        8 | 李店乡       |
| 10 |        2 | 息县         |
| 11 |       10 | 关店乡       |
| 12 |        3 | 邓湾乡       |
| 13 |        3 | 台头乡       |
| 14 |        3 | 谷堆乡       |
| 15 |        1 | 南阳市       |
| 16 |       15 | 方城县       |
| 17 |        1 | 驻马店市     |
| 18 |       17 | 正阳县       |
+----+----------+--------------+

 由下而上

sql:

with recursive r as 
(
select * from c where id =11 
union all 
select c.* from c,r where c.id=r.ParentID
) select * from r order by id;

 

 result:

+------+----------+-----------+
| ID   | ParentID | name      |
+------+----------+-----------+
|    1 |        0 | 河南省    |
|    2 |        1 | 信阳市    |
|   10 |        2 | 息县      |
|   11 |       10 | 关店乡    |
+------+----------+-----------+

由上而下

sql:

with recursive r as
(
select id,name from c where id=1
union all 
select c.id,CONCAT(r.name, ‘>‘, c.name) as name from c,r where r.id = c.ParentID
)select id,name from r;

result:

+------+-----------------------------------------+
| id   | name                                    |
+------+-----------------------------------------+
|    1 | 河南省                                  |
|    2 | 河南省>信阳市                           |
|    5 | 河南省>安阳市                           |
|   15 | 河南省>南阳市                           |
|   17 | 河南省>驻马店市                         |
|    3 | 河南省>信阳市>淮滨县                    |
|    6 | 河南省>安阳市>滑县                      |
|    8 | 河南省>信阳市>固始县                    |
|   10 | 河南省>信阳市>息县                      |
|   16 | 河南省>南阳市>方城县                    |
|   18 | 河南省>驻马店市>正阳县                  |
|    4 | 河南省>信阳市>淮滨县>芦集乡             |
|    7 | 河南省>安阳市>滑县>老庙乡               |
|    9 | 河南省>信阳市>固始县>李店乡             |
|   11 | 河南省>信阳市>息县>关店乡               |
|   12 | 河南省>信阳市>淮滨县>邓湾乡             |
|   13 | 河南省>信阳市>淮滨县>台头乡             |
|   14 | 河南省>信阳市>淮滨县>谷堆乡             |
+------+-----------------------------------------+

mysql 8.0实现递归

原文:https://www.cnblogs.com/zhjh256/p/10901293.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!