mysq递归l遍历层级关系,从父节点为13805,找到叶子结点并按顺序查询出来的sql语法怎么写

时间: 2024-03-02 16:48:46 浏览: 23
假设我们有一个存储层级关系的表`my_table`,包含`id`、`parent_id`和`name`三个字段,现在要从父节点为13805开始,找到所有叶子结点并按顺序查询出来,可以使用以下SQL语句: ```sql WITH RECURSIVE cte AS ( SELECT id, parent_id, name, 1 AS level, CAST(name AS CHAR(200)) AS path FROM my_table WHERE id = 13805 UNION ALL SELECT t.id, t.parent_id, t.name, cte.level + 1, CONCAT(cte.path, ' > ', t.name) FROM my_table t JOIN cte ON t.parent_id = cte.id ) SELECT id, parent_id, name, level, path FROM cte WHERE NOT EXISTS (SELECT 1 FROM my_table WHERE parent_id = cte.id) ORDER BY path; ``` 其中,递归查询的起点是`WHERE id = 13805`,只查询出以13805为根节点的子树。其他部分的含义和上面的示例SQL语句是一样的。
相关问题

mysq递归查询完整sql

递归查询是指在一个表中,通过某个字段的父子关系,查询出该字段下的所有子孙节点。MySQL中可以使用WITH RECURSIVE语句进行递归查询,具体示例如下: 假设有一个表employee,包含字段id、name、parent_id,其中parent_id表示该员工的上级员工ID。 ``` CREATE TABLE employee ( id INT PRIMARY KEY, name VARCHAR(50), parent_id INT ); INSERT INTO employee VALUES (1, 'A', NULL); INSERT INTO employee VALUES (2, 'B', 1); INSERT INTO employee VALUES (3, 'C', 1); INSERT INTO employee VALUES (4, 'D', 2); INSERT INTO employee VALUES (5, 'E', 2); INSERT INTO employee VALUES (6, 'F', 4); INSERT INTO employee VALUES (7, 'G', 5); ``` 要查询员工A的所有下属员工,可以使用以下SQL语句: ``` WITH RECURSIVE subordinates AS ( SELECT id, name, parent_id FROM employee WHERE id = 1 UNION ALL SELECT e.id, e.name, e.parent_id FROM employee e JOIN subordinates s ON e.parent_id = s.id ) SELECT * FROM subordinates; ``` 在这个例子中,首先查询出id为1的员工,然后通过UNION ALL和JOIN语句递归查询出所有该员工下属的员工。最终结果如下: ``` +----+------+-----------+ | id | name | parent_id | +----+------+-----------+ | 1 | A | NULL | | 2 | B | 1 | | 3 | C | 1 | | 4 | D | 2 | | 5 | E | 2 | | 6 | F | 4 | | 7 | G | 5 | +----+------+-----------+ ```

mysq 递归查询不支持

MySQL 是一个关系型数据库管理系统,它本身并不直接支持递归查询。然而,你可以通过使用递归查询的技巧来实现类似的功能。 在 MySQL 中,你可以使用存储过程或触发器来模拟递归查询。存储过程是一组预定义的 SQL 语句集合,可以在数据库中存储和重复使用。触发器是在特定的数据库操作(如插入、更新或删除)发生时自动触发的一段代码。 以下是一个使用存储过程来模拟递归查询的示例: ```mysql DELIMITER // CREATE PROCEDURE recursive_query(IN start_id INT) BEGIN -- 创建临时表来保存结果 CREATE TEMPORARY TABLE temp_table (id INT); -- 将起始 ID 插入临时表 INSERT INTO temp_table VALUES (start_id); -- 递归查询 REPEAT INSERT INTO temp_table SELECT child_id FROM your_table WHERE parent_id IN (SELECT id FROM temp_table); UNTIL ROW_COUNT() = 0 END REPEAT; -- 从临时表中获取结果 SELECT * FROM temp_table; -- 删除临时表 DROP TEMPORARY TABLE IF EXISTS temp_table; END // DELIMITER ; ``` 上述示例中,`your_table` 是包含父子关系的表,`start_id` 是递归查询的起始 ID。存储过程会创建一个临时表,然后通过循环插入满足条件的子节点,直到没有更多的子节点可插入为止,最后返回临时表中的结果。 请注意,这只是一种模拟递归查询的方法,并不是 MySQL 自带的功能。在实际使用之前,你需要根据自己的数据结构和需求进行适当的调整。

相关推荐

最新推荐

recommend-type

mysql批量执行sql文件的方法

1、待执行的sql文件为1.sql、2.sql、3.sql、4.sql等 2、写一个batch.sql文件: source 1.sql; source 2.sql; source 3.sql; source 4.sql; 3、在mysql下执行source /batch文件所在目录/batch.sql; 以上就是小编为...
recommend-type

MySQL 清除表空间碎片的实例详解

MySQL 清除表空间碎片的实例详解 碎片产生的原因 (1)表的存储会出现碎片化,每当删除了一行内容,该段...一个表有1万行,每行10字节,会占用10万字节存储空间,执行删除操作,只留一行,实际内容只剩下10字节,但MySQ
recommend-type

还原大备份mysql文件失败的解决方法分享

用下面方法解决(管理mysql用的是navicat).,设置以下几个参数的值后就正常了,以下语句也可以在mysql的控制台上执行 . 代码如下: show variables like ‘%timeout%’; show variables like ‘%packet%’;...
recommend-type

MySQL 有输入输出参数的存储过程实例

1、实例 代码如下:DELIMITER // DROP PROCEDURE IF EXISTS `test`.`p_getvalue` // CREATE DEFINER=`root`@`localhost` PROCEDURE `p_getvalue`( in id varchar(20),out s varchar(20) ) begin if (length(id)=11) ...
recommend-type

ASP.NET技术在网站开发设计中的研究与开发(论文+源代码+开题报告)【ASP】.zip

ASP.NET技术在网站开发设计中的研究与开发(论文+源代码+开题报告)【ASP】
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

MATLAB结构体与对象编程:构建面向对象的应用程序,提升代码可维护性和可扩展性

![MATLAB结构体与对象编程:构建面向对象的应用程序,提升代码可维护性和可扩展性](https://picx.zhimg.com/80/v2-8132d9acfebe1c248865e24dc5445720_1440w.webp?source=1def8aca) # 1. MATLAB结构体基础** MATLAB结构体是一种数据结构,用于存储和组织相关数据。它由一系列域组成,每个域都有一个名称和一个值。结构体提供了对数据的灵活访问和管理,使其成为组织和处理复杂数据集的理想选择。 MATLAB中创建结构体非常简单,使用struct函数即可。例如: ```matlab myStruct
recommend-type

详细描述一下STM32F103C8T6怎么与DHT11连接

STM32F103C8T6可以通过单总线协议与DHT11连接。连接步骤如下: 1. 将DHT11的VCC引脚连接到STM32F103C8T6的5V电源引脚; 2. 将DHT11的GND引脚连接到STM32F103C8T6的GND引脚; 3. 将DHT11的DATA引脚连接到STM32F103C8T6的GPIO引脚,可以选择任一GPIO引脚,需要在程序中配置; 4. 在程序中初始化GPIO引脚,将其设为输出模式,并输出高电平,持续至少18ms,以激活DHT11; 5. 将GPIO引脚设为输入模式,等待DHT11响应,DHT11会先输出一个80us的低电平,然后输出一个80us的高电平,
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。