相关文章推荐
任性的火车  ·  mysql ...·  3 天前    · 
开朗的啄木鸟  ·  C++ AMP 概觀 | ...·  2 月前    · 
不开心的镜子  ·  mysql ...·  1 年前    · 

一张school表,字段有主键id和父层级id,大学是最高的一个父节点,降序排序就是:大学>高中>小学>幼儿园,根据mysql8递归函数,可实现根据不同节点向上或者向下查询所有有关联的节点。

  1. 根据父节点递归向下查询所有子节点
    在这里插入图片描述
  2. 根据子节点向上递归查询所有父节点
    在这里插入图片描述

初始化表结构和数据

CREATE TABLE `school` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键id',
  `parent_id` int(11) NOT NULL COMMENT '父层级id',
  `sname` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '名称',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

插入示范数据

INSERT INTO `test`.`school`(`id`, `parent_id`, `sname`) VALUES (1, -1, '大学');
INSERT INTO `test`.`school`(`id`, `parent_id`, `sname`) VALUES (2, 1, '高中');
INSERT INTO `test`.`school`(`id`, `parent_id`, `sname`) VALUES (3, 2, '小学');
INSERT INTO `test`.`school`(`id`, `parent_id`, `sname`) VALUES (4, 3, '幼儿园');

SQL实现

父节点向下递归所有子节点

WITH RECURSIVE r_t AS (
	SELECT
		s1.id,
		s1.parent_id,
		s1.sname 
		school s1 
	WHERE
		s1.id = 1 UNION ALL
	SELECT
		s2.id,
		s2.parent_id,
		s2.sname 
		school s2
		INNER JOIN r_t ON r_t.id = s2.parent_id 
	) SELECT
	r_t;

子节点向上递归所有父节点

WITH RECURSIVE r_t AS (
	SELECT
		s1.id,
		s1.parent_id,
		s1.sname 
		school s1 
	WHERE
		s1.id = 4 UNION ALL
	SELECT
		s2.id,
		s2.parent_id,
		s2.sname 
		school s2
		INNER JOIN r_t ON r_t.parent_id = s2.id 
	) SELECT
	r_t;
                    目录前言说明效果图初始化表结构和数据表结构插入示范数据SQL实现父节点向下递归所有子节点子节点向上递归所有父节点前言说明一张school表,字段有主键id和父层级id,大学是最高的一个父节点,降序排序就是:大学>高中>小学>幼儿园,根据mysql8递归函数,可实现根据不同节点向上或者向下查询所有有关联的节点。效果图根据父节点递归向下查询所有子节点根据子节点向上递归查询所有父节点初始化表结构和数据表结构CREATE TABLE `school` (  `id` .
				
简介:mysql5.0.94版本,该版本以及较高级的版本(5.5、6等等)尚未支持循环递归查询,和sqlserver、oracle相比,mysql难于在树状表中层层遍历的子节点。本程序重点参考了下面的资料,写了两个sql存储过程,子节点查询算是照搬了,节点查询是逆思维弄的。 表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段(对应该记录的节点,当然,一个节点自然会有一个以上的子节点嘛) 代码如下: CREATE FUNCTION `getChildList`(rootId INT) RETURNS varchar(1000) BEGIN D
表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段; 如下mysql查询函数即可实现根据一个节点查询所有的子节点,根据一个子节点查询所有的节点。对于数据量较大的时候(我这里测试的1万条左右)。查询效率非常慢。建议在java代码中进行处理。 CREATE FUNCTION `getChildList`(rootId INT) RETURN...
MySQL中,可以使用WITH RECURSIVE语句实现递归查询。WITH RECURSIVE语句由两部分组成,第一部分是递归关系的初始查询,第二部分是递归查询的联结操作。 举个例子,假设要查询一个树形结构的组织架构,该表中包含了每个部门的ID、名称以及部门ID。首先,需要一个初始查询,用于从根节点开始逐层查询子节点。具体代码如下: WITH RECURSIVE org_tree(id, name, parent_id) AS SELECT id, name, parent_id FROM org WHERE parent_id IS NULL -- 根节点 UNION ALL SELECT o.id, o.name, o.parent_id FROM org o JOIN org_tree t ON t.id = o.parent_id -- 递归查询 SELECT * FROM org_tree; 上面的代码中,第一部分查询了根节点。在第二部分中,通过联结操作递归查询下一层的子节点。其中,ORG_TREE是临时表的名称,ID、NAME、PARENT_ID是表的字段名称。 此时,就可以从根节点开始递归查询所有子节点的信息了。这条SQL语句非常简单,并且非常高效。如果没有使用递归查询,可能需要多次连接数据库或者使用嵌套查询才能得到同样的结果。
RabbitMQ报错:connection error; protocol method: #method<connection.close>(reply-code=530, reply-text=N 13296
RabbitMQ报错:connection error; protocol method: #method<connection.close>(reply-code=530, reply-text=N 该你长安开起飞: 感谢老公,嘎嘎管用 curl: command not found解决方法 weixin_39389835: 一个yum install curl命令就行了,为什么非要带yum update????故意的??? 踩坑最多的springboot详细整合jsp,springboot+jsp运行启动404、打jar包后访问404 TristenC: prefix的二级目录后面少写了个/,我丢! Java设计模式之三大分类 长青青很爱笑: 小妹妹好棒哦 mybatis插入数据不返回主键id可能原因及解决 ZQT向前进: 我也是呜呜呜,看了你的终于知道了