1 表结构如下:
CREATE TABLE `org` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL,
`parent_id` bigint DEFAULT NULL,
PRIMARY KEY (`id`)
)
2 使用mysql的WITH RECURSIVE语法进行递归查询,假设表中数据如下:
| id | name | parent_id |
|---|---|---|
| 1 | NB公司 | |
| 2 | NB部门1 | 1 |
| 3 | NB部门2 | 1 |
| 4 | NB部门科室1 | 2 |
| 5 | NB部门科室2 | 2 |
| 6 | NB员工 | 4 |
使用WITH RECURSIVE递归查询NB员工的层级关系的sql代码如下:
WITH RECURSIVE cte AS (
SELECT id, NAME, parent_id FROM org WHERE NAME = 'NB员工'
UNION
SELECT e.id, e.name, e.parent_id
FROM org AS e
INNER JOIN cte AS m
ON e.id = m.parent_id
)
SELECT * FROM cte
3 递归语法说明:
SELECT id, NAME, parent_id FROM org WHERE NAME = 'NB员工'
这句代码表示初始值,初始值存入表cte中
SELECT e.id, e.name, e.parent_id
FROM org AS e
INNER JOIN cte AS m
ON e.id = m.parent_id
这段代码是递归查询语句,遍历org表,找出cte表中所有记录的父记录,然后将新的记录加入到cte表中,递归查询,直到没有新的记录加入cte表。