Mysql8.0递归查询的简单用法示例
作者:阿豪_mike 时间:2024-01-22 16:06:42
前言
本文使用Mysql8.0的特新实现递归查询,文中给出了详细的实例代码,下面话不多说了,来一起看看详细的介绍吧
Mysql8.0递归查询用法
表数据如下
+--------+----------+------------+
| cat_id | name | parent_cid |
+--------+----------+------------+
| 12 | 美妆 | 0 |
| 4 | 服装 | 0 |
| 5 | 女装 | 4 |
| 6 | 男装 | 4 |
| 7 | 童装 | 4 |
| 19 | 美容美体 | 12 |
| 18 | 彩妆 | 12 |
| 13 | 护肤 | 12 |
| 15 | 护肤套装 | 13 |
| 40 | 防晒 | 13 |
| 39 | 卸妆 | 13 |
| 38 | 润唇膏 | 13 |
| 17 | 乳液面霜 | 13 |
| 16 | 面膜 | 13 |
| 14 | 化妆水 | 13 |
+--------+----------+------------+
1. 我们需要查询出"服装"分类下的所有子分类
with recursive type_cte as (
select * from t_category where cat_id = 4
union all
select t.* from t_category t
inner join type_cte type_cte2 on t.parent_cid = type_cte2.cat_id
)
select
cat_id, name, parent_cid
from type_cte
+--------+------+------------+
| cat_id | name | parent_cid |
+--------+------+------------+
| 4 | 服装 | 0 |
| 5 | 女装 | 4 |
| 6 | 男装 | 4 |
| 7 | 童装 | 4 |
+--------+------+------------+
2. 查询出所有“美妆”分类下的所有子分类,并且分类名称带上上级分类的名称
with recursive type_cte as (
select cat_id,name,parent_cid from t_category where cat_id = 12
union all
select t.cat_id,concat(type_cte2.name,'>',t.name),t.parent_cid
from t_category t
inner join type_cte type_cte2 on t.parent_cid = type_cte2.cat_id
)
select
cat_id, name, parent_cid
from type_cte;
+--------+------------------------+------------+
| cat_id | name | parent_cid |
+--------+------------------------+------------+
| 12 | 美妆 | 0 |
| 13 | 美妆>护肤 | 12 |
| 18 | 美妆>彩妆 | 12 |
| 19 | 美妆>美容美体 | 12 |
| 14 | 美妆>护肤>化妆水 | 13 |
| 15 | 美妆>护肤>护肤套装 | 13 |
| 16 | 美妆>护肤>面膜 | 13 |
| 17 | 美妆>护肤>乳液面霜 | 13 |
| 35 | 美妆>护肤>洁面 | 13 |
| 36 | 美妆>护肤>精华 | 13 |
| 37 | 美妆>护肤>眼霜 | 13 |
| 38 | 美妆>护肤>润唇膏 | 13 |
| 39 | 美妆>护肤>卸妆 | 13 |
| 40 | 美妆>护肤>防晒 | 13 |
+--------+------------------------+------------+
3. 查询分类的所有父级分类
根据第二个问题的sql做一下调整即可
with recursive type_cte as (
select cat_id,name,parent_cid from t_category where cat_id = 40
union all
select t.cat_id,concat(type_cte2.name,'>',t.name),t.parent_cid
from t_category t
inner join type_cte type_cte2 on t.cat_id = type_cte2.parent_cid
)
select
cat_id, name, parent_cid
from type_cte;
+--------+----------------+------------+
| cat_id | name | parent_cid |
+--------+----------------+------------+
| 40 | 防晒 | 13 |
| 13 | 防晒>护肤 | 12 |
| 12 | 防晒>护肤>美妆 | 0 |
+--------+----------------+------------+
总结
来源:https://juejin.cn/post/6991026506042441759
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
vue项目配置element-ui容易遇到的坑及解决
![](https://img.aspxhome.com/file/2023/8/132908_0s.png)
Python大批量搜索引擎图像爬虫工具详解
JavaScript forEach()遍历函数使用及介绍
利用scikitlearn画ROC曲线实例
python中的turtle库函数简单使用教程
![](https://img.aspxhome.com/file/2023/4/92054_0s.jpg)
golang 用msgpack高效序列化的案例
BeautifulSoup中find和find_all的使用详解
![](https://img.aspxhome.com/file/2023/4/93514_0s.png)
vue面试之new Vue的时候到底做了什么
![](https://img.aspxhome.com/file/2023/0/123130_0s.png)
c#连接sqlserver数据库、插入数据、从数据库获取时间示例
Yahoo!网站性能最佳体验的34条黄金守则——图片、Coockie与移动应用
Vue keepAlive 数据缓存工具实现返回上一个页面浏览的位置
Python操作Excel神器openpyxl使用教程(超详细!)
![](https://img.aspxhome.com/file/2023/9/82589_0s.png)
python网络爬虫基于selenium爬取斗鱼直播信息
利用Python+PyQt5实现简易浏览器的实战记录
![](https://img.aspxhome.com/file/2023/3/77853_0s.png)
T-SQL中使用正则表达式函数
JavaScript实现alert弹框效果
![](https://img.aspxhome.com/file/2023/2/130282_0s.gif)
pycharm打包py项目为.exe可执行文件的两种方式
![](https://img.aspxhome.com/file/2023/3/127723_0s.jpg)
开展全面的网站评估
Python使用微信SDK实现的微信支付功能示例
Python imutils 填充图片周边为黑色的实现
![](https://img.aspxhome.com/file/2023/5/90775_0s.jpg)