Mysql递归查询

Mysql递归查询-直观

测试数据
CREATE TABLE `sys_recursion` (
  `id` int NOT NULL AUTO_INCREMENT,
  `code` varchar(100) NOT NULL,
  `parent_code` varchar(64) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=17 DEFAULT CHARSET=utf8mb3


INSERT INTO sys_recursion
(id, code, parent_code)
VALUES(9, '张三爷爷', '0');
INSERT INTO sys_recursion
(id, code, parent_code)
VALUES(10, '张三', '张三爸爸');
INSERT INTO sys_recursion
(id, code, parent_code)
VALUES(11, '张三', '张三妈妈');
INSERT INTO sys_recursion
(id, code, parent_code)
VALUES(12, '张三爸爸', '张三爷爷');
INSERT INTO sys_recursion
(id, code, parent_code)
VALUES(13, '张三儿子', '张三');
INSERT INTO sys_recursion
(id, code, parent_code)
VALUES(14, '张三女儿', '张三');
INSERT INTO sys_recursion
(id, code, parent_code)
VALUES(15, '李四', '李四爸爸');
INSERT INTO sys_recursion
(id, code, parent_code)
VALUES(16, '李四儿子', '李四');

在这里插入图片描述

父节点查询子节点
with recursive cur_recursion as (
select
	code,
	parent_code ,
	0 as level
from
	sys_recursion
where
	code = '张三爸爸'
	-- 这里是起始的父节点ID,您可以根据需要修改
union all
select
	o.code,
	o.parent_code,
	rc.level + 1
from
	sys_recursion o
inner join cur_recursion rc on
	o.parent_code = rc.code )
select
	*
from
	cur_recursion;

在这里插入图片描述

子节点查询父节点
with recursive cur_recursion as (
select
	code,
	parent_code ,
	0 as level
from
	sys_recursion
where
	code = '张三儿子'
union all
select
	o.code,
	o.parent_code,
	rc.level + 1
from
	sys_recursion o
inner join cur_recursion rc on
	o.code = rc.parent_code )
select
	*
from
	cur_recursion;

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值