MySQL - 8 递归查询树结构
- 目标
数据库的一张表中,保存了 具有父子级关系的一组数据。1 根据主键id,递归查询它的所有子级;2 递归查询它的所有父级。
- 示意图
- 数据库建表语句
CREATE TABLE `tbl_tree` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`parent_id` int(11) DEFAULT NULL,
`name` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8;
- 递归查询所有子级(由上而下)
查询id为1的行,及其所有子级
WITH RECURSIVE td AS (
SELECT * FROM tbl_tree WHERE id = 1
UNION ALL
SELECT c.* FROM tbl_tree c ,td WHERE c.parent_id = td.id
) SELECT * FROM td ORDER BY td.id;
- 递归查询所有父级(由下向上)
查询id为10的行,及其所有父级
WITH RECURSIVE td AS (
SELECT * FROM tbl_tree WHERE id = 10
UNION ALL
SELECT c.* FROM tbl_tree c, td WHERE c.id=td.parent_id
)SELECT * FROM td ORDER BY td.id;
- (附)测试数据
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('1', '0', '家配成品类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('2', '0', '营销物料类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('3', '1', '家配');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('4', '1', '寝具');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('5', '1', '衣百货');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('6', '2', '物料');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('7', '3', '凳类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('8', '3', '椅类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('9', '3', '床类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('10', '3', '餐椅类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('11', '3', '桌台类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('12', '3', '沙发类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('13', '3', '窗帘类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('14', '3', '茶几类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('15', '3', '床头柜类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('16', '3', '软床类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('17', '3', '按摩护理类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('18', '3', '其它配套类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('19', '4', '软床类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('20', '4', '床垫类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('21', '4', '床配类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('22', '4', '床头柜类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('23', '4', '排骨架类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('24', '4', '销售道具');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('25', '5', '礼包类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('26', '5', '日用品类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('27', '5', '家居饰品类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('28', '5', '家居小家电类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('29', '5', '其它功能五金类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('30', '6', '物料类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('31', '6', '服装物料类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('32', '6', '衣柜线宣传物料类');
INSERT INTO `test`.`tbl_tree` (`id`, `parent_id`, `name`) VALUES ('33', '6', '其他展示产品');
MySQL - 8 递归查询树结构相关推荐
- mysql递归sql_SQL如何实现MYSQL的递归查询,SQL实现MYSQL递归
猿哥解读 本文的亮点在于很多PHPer肯定不知道MySQL还能这么用. 所周知,目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的.这 ...
- MySQL递归查询,Oracle递归查询,MyBatis+MySQL实现递归查询
递归查询用于查询树形结构的列表,比如行政区列表.包括向下递归查询:根据父级查询子级:向上查询:根据子级查询父级.mysql需要使用存储函数,oracle可以使用connect by语句直接查询. My ...
- mysql 向上递归查询_mysql如何实现递归查询
mysql实现递归查询的方法:首先创建表,并初始化数据:然后向下递归,利用[find_in_set()]函数和[group_concat()]函数实现递归查询. 本教程操作环境:windows7系统. ...
- MySQL实现递归查询
文章目录 概述 测试环境 测试表 插入测试数据 开始测试 使用表连接 临时表+存储过程 使用函数 概述 前几日有客户咨询关于mysql实现递归查询的方法,当时简单了解了一下,觉得递归查询逻辑层面一种特 ...
- 同事问我MySQL怎么递归查询,我懵逼了...
前言 最近在做的业务场景涉及到了数据库的递归查询.我们公司用的 Oracle ,众所周知,Oracle 自带有递归查询的功能,所以实现起来特别简单. 但是,我记得 MySQL 是没有递归查询功能的,那 ...
- mysql实现递归查询---使用存储过程
说明:mysql不支持WITH RECURSIVE,不能像PostgreSQL数据库那样查询,需要使用到存储过程 1.创建表: DROP TABLE IF EXISTS `t_areainfo`; C ...
- MYSQL的递归查询
众所周知,目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的.这个得益于Mysql允许在SQL语句内使用@变量.以下是示例代码. ## ...
- mysql反向递归查询_递归查询所有下级部门树形结构反向递归获取所有ID集合
mysql递归搜索再之前得原创文档里已经写明了,这个网上比较多. 直接进入正题:原创手写反递归 package com.kb.nxccims.common.util; import java.util ...
- Java实现递归查询树结构
我们在实际开发中,肯定会用到树结构,如部门树.菜单树等等.Java后台利用递归思路进行构建树形结构数据,返回给前端,能以下拉菜单等形式进行展示.今天,咱们就来说说怎么样将List集合转换成TreeLi ...
最新文章
- ASP.NET保持用户状态的九种选择
- 微信小程序动画无限循环 掉花
- Linux C++/Java/Web/OC Socket网络编程
- Python常用模块之logging模块
- JAVA 13 (集合框架)
- jasperreports_JasperReports:棘手的部分
- 数据结构实验之查找五:平方之哈希表
- mysql的dbconn_管道错误使用mysql.conn
- 杭电1166敌兵布阵(线段树)
- 宝塔面板nginx跨域配置(跳坑)
- c语言程序心得体会感想,c语言编程学习心得体会3篇
- 常系数非齐次线性微分方程和非齐次方程组的特解和齐次解的关系
- 摩克机器人_第三章 摩克都市的一场灾难(上)
- mysql不同分数的人数,mysql如何统计每个专业分数段的人数
- 类ChatGPT的部署与微调(上):从LLaMA、Alpaca/Vicuna/BELLE、中文版
- 计算机电源出现问题,电源故障引起的电脑问题
- MapStruct系列(6)-映射集合、映射Stream流、映射枚举
- Button点击事件
- 如何打赢呼叫中心人才管理前哨战
- VPC对等连接(VPC Peering)