MYSQL递归查询数据

MYSQL递归:

-- 表结构创建 包括主键id,组织名称,父id
CREATE TABLE categories (  
    id INT PRIMARY KEY,  
    name VARCHAR(255) NOT NULL,  
    parent_id INT,  
    FOREIGN KEY (parent_id) REFERENCES categories(id)  
);

插入测试数据:

INSERT INTO `categories`(`id`, `name`, `parent_id`) VALUES (1, '公司', NULL);
INSERT INTO `categories`(`id`, `name`, `parent_id`) VALUES (2, '技术中心', 1);
INSERT INTO `categories`(`id`, `name`, `parent_id`) VALUES (3, '研发部', 2);
INSERT INTO `categories`(`id`, `name`, `parent_id`) VALUES (4, '测试部', 2);
INSERT INTO `categories`(`id`, `name`, `parent_id`) VALUES (5, '产品部', 2);

示例:通过递归的方式查询技术中心下的子部门

WITH RECURSIVE temp_tree(id,name,parent_id,depth) AS (
	SELECT id,name,parent_id,0 as depth
	FROM categories
	WHERE id = '1'
	UNION ALL 
	SELECT c.id,c.name,c.parent_id,t.depth + 1
	FROM categories c JOIN temp_tree t ON c.parent_id = t.id
)
SELECT * FROM temp_tree

1、WITH RECURSIVE: MYSQL递归执行语法,temp_tree:为临时表括号中字段为最终查询出的字段;

2、递归主要包括初始部分和递归部分:

(1)初始部分是union all上的select查询,查询的为id为1的初始数据

IDNAMEPARENT_IDDEPTH
1公司0

(2)递归部分是是union all下的select查询,连接临时表递归查询数据

最终查询结果如下:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值