mysql 递归查询 树形展示数据类型

1.数据准备

CREATE TABLE departments (
  id INT PRIMARY KEY,
  name VARCHAR(50) NOT NULL,
  parent_id INT
);


INSERT INTO departments (id, name, parent_id) VALUES
(1, '总公司', NULL),
(2, '研发部', 1),
(3, '市场部', 1),
(4, '产品部', 2),
(5, '测试部', 2),
(6, '销售部', 3),
(7, '客服部', 3),
(8, '市场推广部', 6),
(9, '市场调研部', 6),
(10, '售后服务部', 7);

2.我们想要查询出所有的部门以及它们的层级关系。可以使用以下的递归查询语句

WITH RECURSIVE cte AS (
  SELECT id, name, parent_id, 0 as level
  FROM departments
  WHERE parent_id IS NULL
  UNION ALL
  SELECT d.id, d.name, d.parent_id, c.level + 1
  FROM departments d
  INNER JOIN cte c ON d.parent_id = c.id
)
SELECT id, name, parent_id, level
FROM cte
ORDER BY id;

上述代码中,我们使用了WITH RECURSIVE关键字来定义一个递归公用表达式,该表达式逐层递归查询每个部门的信息,直到查询到根部门。具体步骤如下:

  1. 从顶层部门开始查询(即parent_idNULL的部门),并将查询结果存储到cte表中。
  2. 对于每个查询结果,我们再次查询其子部门,并将查询结果与上一级部门的id相连接,以获取它们的上下级关系。这一过程持续进行,直到查询到最底层的子部门。
  3. 最终,我们得到一个包含所有部门信息的递归查询结果,每一行表示一个部门的信息及其在整个部门层级结构中的层数
  4. 最终结果如下图:

 3.sql详细步骤解析

三次递归结果union all 得到最终结果

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL递归查询树结构是指在MySQL数据库中,通过使用递归查询语句来查询树形结构的数据。树形结构是一种常见的数据结构,例如组织架构、分类目录等都可以表示为树形结构。 在MySQL中,可以使用递归查询语句来查询树形结构的数据。递归查询语句使用了WITH RECURSIVE关键字来定义递归查询,并通过递归调用自身来实现对树形结构的遍历。 下面是一个示例,假设有一个名为categories的表,其中包含了id、name和parent_id字段,用于表示分类目录的树形结构: ``` CREATE TABLE categories ( id INT PRIMARY KEY, name VARCHAR(50), parent_id INT ); INSERT INTO categories (id, name, parent_id) VALUES (1, '电子产品', NULL), (2, '手机', 1), (3, '电脑', 1), (4, '苹果手机', 2), (5, '小米手机', 2), (6, '华为手机', 2), (7, '苹果电脑', 3), (8, '联想电脑', 3); ``` 要查询整个分类目录的树形结构,可以使用以下递归查询语句: ``` WITH RECURSIVE category_tree AS ( SELECT id, name, parent_id, 0 AS level FROM categories WHERE parent_id IS NULL UNION ALL SELECT c.id, c.name, c.parent_id, ct.level + 1 FROM categories c INNER JOIN category_tree ct ON c.parent_id = ct.id ) SELECT * FROM category_tree; ``` 这个查询语句中,首先定义了一个递归查询表category_tree,初始查询是根节点(parent_id为NULL的节点),然后通过UNION ALL和JOIN操作递归查询子节点,直到查询完整个树形结构。 通过执行以上查询语句,可以得到如下结果: ``` id | name | parent_id | level --+--+--+------ 1 | 电子产品 | NULL | 0 2 | 手机 | 1 | 1 3 | 电脑 | 1 | 1 4 | 苹果手机 | 2 | 2 5 | 小米手机 | 2 | 2 6 | 华为手机 | 2 | 2 7 | 苹果电脑 | 3 | 2 8 | 联想电脑 | 3 | 2 ``` 这样就可以通过递归查询语句来获取整个树形结构的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值