Mysql8.0递归查询的简单用法示例

在项目中会遇到同一个表中保存着父子关系的数据,最常见的就是处理树形结构资源,这篇文章主要给大家介绍了关于Mysql8.0递归查询的简单用法,需要的朋友可以参考下

前言

本文使用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. 我们需要查询出"服装"分类下的所有子分类

?

1

2

3

4

5

6

7

8

9

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. 查询出所有“美妆”分类下的所有子分类,并且分类名称带上上级分类的名称

?

1

2

3

4

5

6

7

8

9

10

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做一下调整即可

?

1

2

3

4

5

6

7

8

9

10

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 |
+——–+—————-+————+

总结

到此这篇关于Mysql8.0递归查询的文章就介绍到这了,更多相关Mysql8.0递归查询内容请搜索钦钦技术栈以前的文章或继续浏览下面的相关文章希望大家以后多多支持钦钦技术栈!

原文链接:https://juejin.cn/post/6991026506042441759

版权声明:本文(即:原文链接:https://www.qin1qin.com/catagory/6169/)内容由互联网用户自发投稿贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 630367839@qq.com 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022-07-28 12:07:32
下一篇 2022-07-28 12:07:45

软件定制开发公司

相关阅读

发表回复

登录后才能评论
通知:禁止投稿所有关于虚拟货币,币圈类相关文章,发现立即永久封锁账户ID!