mysql如何使用递归查询

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表。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容