Mysql递归查询

        Mysql递归查询通常使用 " WITH RECURSIVE " 语句实现。

        在Mysql5.7及之前版本无法使用,本次笔记Mysql版本为8.0

1.案例

1.2创建表结构

CREATE TABLE company_department (
    department_id INT ,
    department_name VARCHAR(50),
    parent_department_id INT );

1.3插入数据

INSERT INTO company_department
    (department_id, department_name, parent_department_id)
VALUES
    (1, '公司', NULL),
    (2, '人力资源部', 1),
    (3, '财务部', 1),
    (4, '市场部', 1),
    (5, '技术部', 1),
    (6, '招聘部', 2),
    (7, '薪资部', 2),
    (8, '成本控制部', 3),
    (9, '收支管理部', 3),
    (10, '品牌推广部', 4),
    (11, '销售部', 4),
    (12, '前端开发部', 5),
    (13, '后端开发部', 5);

1.4 递归查询公司部门之间的关系

WITH RECURSIVE department_tree (department_id, department_name, parent_department_id, level, path) AS (
		SELECT
			department_id,
			department_name,
			parent_department_id,
			1 AS level,
			CAST(department_name AS CHAR(200)) AS path
		FROM company_department
		WHERE parent_department_id IS NULL
		UNION ALL
		SELECT
			cd.department_id,
			cd.department_name,
			cd.parent_department_id,
			dt.level + 1 AS level,
			CONCAT(dt.path, '->', cd.department_name) AS path
		FROM company_department cd
			JOIN department_tree dt ON cd.parent_department_id = dt.department_id
	)
SELECT
	department_id, department_name, parent_department_id, level, path
FROM department_tree
ORDER BY department_id;

1.5查询结果

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
MySQL中可以使用递归查询来处理一些具有层级结构的数据,例如树形结构、组织架构等。MySQL中提供了WITH RECURSIVE语句来实现递归查询,其语法如下: ``` WITH RECURSIVE cte_name (column_list) AS ( initial_query -- 初始查询语句 UNION ALL recursive_query -- 递归查询语句,必须包含一个引用cte_name的子查询 ) SELECT column_list FROM cte_name; -- 最终查询语句 ``` 其中,`cte_name`是递归查询的名称,`column_list`是查询返回的列名列表,`initial_query`是初始查询语句,`recursive_query`是递归查询语句,必须包含一个引用`cte_name`的子查询。 下面以一个员工表为例,演示一下如何使用递归查询来查询某个员工的所有下属: ``` CREATE TABLE employee ( id INT PRIMARY KEY, name VARCHAR(50), manager_id INT ); INSERT INTO employee VALUES (1, 'Tom', NULL), (2, 'Jerry', 1), (3, 'Mike', 2), (4, 'John', 3), (5, 'Mary', 2), (6, 'Karen', 5); ``` 假设我们要查询Tom的所有下属,可以使用以下递归查询语句: ``` WITH RECURSIVE subordinates AS ( SELECT id, name, manager_id FROM employee WHERE name = 'Tom' UNION ALL SELECT e.id, e.name, e.manager_id FROM employee e JOIN subordinates s ON e.manager_id = s.id ) SELECT * FROM subordinates; ``` 以上查询语句中,首先通过初始查询语句`SELECT id, name, manager_id FROM employee WHERE name = 'Tom'`找到Tom的信息,并将其作为递归查询的起点。然后,递归查询语句`SELECT e.id, e.name, e.manager_id FROM employee e JOIN subordinates s ON e.manager_id = s.id`会递归地查询出所有直接或间接下属的信息,并将其与之前查询出的结果合并。最终,我们通过`SELECT * FROM subordinates`语句查询出所有下属的信息。 以上就是MySQL中使用递归查询的方法,希望对你有所帮助。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

只爱大锅饭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值