mysql实现递归查询的方法:首先创建表,并初始化数据;然后向下递归,利用【find_in_set()】函数和【group_concat()】函数实现递归查询。

本教程操作环境:windows7系统、mysql8.0.22版,该方法适用于所有品牌电脑。

免费学习推荐:mysql教程(视频)

mysql实现递归查询的方法:

1、创建表

1

2

3

4

5

6

7

8

9

DROP TABLE IF EXISTS `t_areainfo`;

CREATE TABLE `t_areainfo` (

`id` int(11) NOT '0' AUTO_INCREMENT,

`level` int(11) DEFAULT '0',

`name` varchar(255) DEFAULT '0',

`parentId` int(11) DEFAULT '0',

`status` int(11) DEFAULT '0',

PRIMARY KEY (`id`)

) ENGINE=InnoDB AUTO_INCREMENT=65 DEFAULT CHARSET=utf8;

2、初始数据

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

INSERT INTO `t_areainfo` VALUES ('1', '0', '中国', '0', '0');

INSERT INTO `t_areainfo` VALUES ('2', '0', '华北区', '1', '0');

INSERT INTO `t_areainfo` VALUES ('3', '0', '华南区', '1', '0');

INSERT INTO `t_areainfo` VALUES ('4', '0', '北京', '2', '0');

INSERT INTO `t_areainfo` VALUES ('5', '0', '海淀区', '4', '0');

INSERT INTO `t_areainfo` VALUES ('6', '0', '丰台区', '4', '0');

INSERT INTO `t_areainfo` VALUES ('7', '0', '朝阳区', '4', '0');

INSERT INTO `t_areainfo` VALUES ('8', '0', '北京XX区1', '4', '0');

INSERT INTO `t_areainfo` VALUES ('9', '0', '北京XX区2', '4', '0');

INSERT INTO `t_areainfo` VALUES ('10', '0', '北京XX区3', '4', '0');

INSERT INTO `t_areainfo` VALUES ('11', '0', '北京XX区4', '4', '0');

INSERT INTO `t_areainfo` VALUES ('12', '0', '北京XX区5', '4', '0');

INSERT INTO `t_areainfo` VALUES ('13', '0', '北京XX区6', '4', '0');

INSERT INTO `t_areainfo` VALUES ('14', '0', '北京XX区7', '4', '0');

INSERT INTO `t_areainfo` VALUES ('15', '0', '北京XX区8', '4', '0');

INSERT INTO `t_areainfo` VALUES ('16', '0', '北京XX区9', '4', '0');

INSERT INTO `t_areainfo` VALUES ('17', '0', '北京XX区10', '4', '0');

INSERT INTO `t_areainfo` VALUES ('18', '0', '北京XX区11', '4', '0');

INSERT INTO `t_areainfo` VALUES ('19', '0', '北京XX区12', '4', '0');

INSERT INTO `t_areainfo` VALUES ('20', '0', '北京XX区13', '4', '0');

INSERT INTO `t_areainfo` VALUES ('21', '0', '北京XX区14', '4', '0');

INSERT INTO `t_areainfo` VALUES ('22', '0', '北京XX区15', '4', '0');

INSERT INTO `t_areainfo` VALUES ('23', '0', '北京XX区16', '4', '0');

INSERT INTO `t_areainfo` VALUES ('24', '0', '北京XX区17', '4', '0');

INSERT INTO `t_areainfo` VALUES ('25', '0', '北京XX区18', '4', '0');

INSERT INTO `t_areainfo` VALUES ('26', '0', '北京XX区19', '4', '0');

INSERT INTO `t_areainfo` VALUES ('27', '0', '北京XX区1', '4', '0');

INSERT INTO `t_areainfo` VALUES ('28', '0', '北京XX区2', '4', '0');

INSERT INTO `t_areainfo` VALUES ('29', '0', '北京XX区3', '4', '0');

INSERT INTO `t_areainfo` VALUES ('30', '0', '北京XX区4', '4', '0');

INSERT INTO `t_areainfo` VALUES ('31', '0', '北京XX区5', '4', '0');

INSERT INTO `t_areainfo` VALUES ('32', '0', '北京XX区6', '4', '0');

INSERT INTO `t_areainfo` VALUES ('33', '0', '北京XX区7', '4', '0');

INSERT INTO `t_areainfo` VALUES ('34', '0', '北京XX区8', '4', '0');

INSERT INTO `t_areainfo` VALUES ('35', '0', '北京XX区9', '4', '0');

INSERT INTO `t_areainfo` VALUES ('36', '0', '北京XX区10', '4', '0');

INSERT INTO `t_areainfo` VALUES ('37', '0', '北京XX区11', '4', '0');

INSERT INTO `t_areainfo` VALUES ('38', '0', '北京XX区12', '4', '0');

INSERT INTO `t_areainfo` VALUES ('39', '0', '北京XX区13', '4', '0');

INSERT INTO `t_areainfo` VALUES ('40', '0', '北京XX区14', '4', '0');

INSERT INTO `t_areainfo` VALUES ('41', '0', '北京XX区15', '4', '0');

INSERT INTO `t_areainfo` VALUES ('42', '0', '北京XX区16', '4', '0');

INSERT INTO `t_areainfo` VALUES ('43', '0', '北京XX区17', '4', '0');

INSERT INTO `t_areainfo` VALUES ('44', '0', '北京XX区18', '4', '0');

INSERT INTO `t_areainfo` VALUES ('45', '0', '北京XX区19', '4', '0');

INSERT INTO `t_areainfo` VALUES ('46', '0', 'xx省1', '1', '0');

INSERT INTO `t_areainfo` VALUES ('47', '0', 'xx省2', '1', '0');

INSERT INTO `t_areainfo` VALUES ('48', '0', 'xx省3', '1', '0');

INSERT INTO `t_areainfo` VALUES ('49', '0', 'xx省4', '1', '0');

INSERT INTO `t_areainfo` VALUES ('50', '0', 'xx省5', '1', '0');

INSERT INTO `t_areainfo` VALUES ('51', '0', 'xx省6', '1', '0');

INSERT INTO `t_areainfo` VALUES ('52', '0', 'xx省7', '1', '0');

INSERT INTO `t_areainfo` VALUES ('53', '0', 'xx省8', '1', '0');

INSERT INTO `t_areainfo` VALUES ('54', '0', 'xx省9', '1', '0');

INSERT INTO `t_areainfo` VALUES ('55', '0', 'xx省10', '1', '0');

INSERT INTO `t_areainfo` VALUES ('56', '0', 'xx省11', '1', '0');

INSERT INTO `t_areainfo` VALUES ('57', '0', 'xx省12', '1', '0');

INSERT INTO `t_areainfo` VALUES ('58', '0', 'xx省13', '1', '0');

INSERT INTO `t_areainfo` VALUES ('59', '0', 'xx省14', '1', '0');

INSERT INTO `t_areainfo` VALUES ('60', '0', 'xx省15', '1', '0');

INSERT INTO `t_areainfo` VALUES ('61', '0', 'xx省16', '1', '0');

INSERT INTO `t_areainfo` VALUES ('62', '0', 'xx省17', '1', '0');

INSERT INTO `t_areainfo` VALUES ('63', '0', 'xx省18', '1', '0');

INSERT INTO `t_areainfo` VALUES ('64', '0', 'xx省19', '1', '0');

3、向下递归

利用find_in_set()函数和group_concat()函数实现递归查询:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

DROP FUNCTION IF EXISTS queryChildrenAreaInfo;

DELIMITER ;;

CREATE FUNCTION queryChildrenAreaInfo(areaId INT)

RETURNS VARCHAR(4000)

BEGIN

DECLARE sTemp VARCHAR(4000);

DECLARE sTempChd VARCHAR(4000);

SET sTemp='$';

SET sTempChd = CAST(areaId AS CHAR);

WHILE sTempChd IS NOT NULL DO

SET sTemp= CONCAT(sTemp,',',sTempChd);

SELECT GROUP_CONCAT(id) INTO sTempChd FROM t_areainfo WHERE FIND_IN_SET(parentId,sTempChd)>0;

END WHILE;

RETURN sTemp;

END

;;

DELIMITER ;

4、调用方式

1

SELECT queryChildrenAreaInfo(1);

查询id为"4"下面的所有节点

1

SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,queryChildrenAreaInfo(4));

5、向上递归

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

DROP FUNCTION IF EXISTS queryChildrenAreaInfo1;

DELIMITER;;

CREATE FUNCTION queryChildrenAreaInfo1(areaId INT)

RETURNS VARCHAR(4000)

BEGIN

DECLARE sTemp VARCHAR(4000);

DECLARE sTempChd VARCHAR(4000);

SET sTemp='$';

SET sTempChd = CAST(areaId AS CHAR);

SET sTemp = CONCAT(sTemp,',',sTempChd);

SELECT parentId INTO sTempChd FROM t_areainfo WHERE id = sTempChd;

WHILE sTempChd <> 0 DO

SET sTemp = CONCAT(sTemp,',',sTempChd);

SELECT parentId INTO sTempChd FROM t_areainfo WHERE id = sTempChd;

END WHILE;

RETURN sTemp;

END

;;

DELIMITER ;

6、调用方式

查询id为"7"的节点的所有上级节点:

1

SELECT * from t_areainfo where FIND_IN_SET(id,queryChildrenAreaInfo1(7));

相关免费推荐:编程视频课程

mysql如何实现递归查询相关推荐

  1. mysql 直接的递归查询

    目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,可以在一句SQL内实现树的递归查询 下面给一个小示例,后续在贴上调用的代码(代码会贴在最后请注意) MySQL递归查询所有子 ...

  2. 同事问我MySQL怎么递归查询,我懵逼了...

    前言 最近在做的业务场景涉及到了数据库的递归查询.我们公司用的 Oracle ,众所周知,Oracle 自带有递归查询的功能,所以实现起来特别简单. 但是,我记得 MySQL 是没有递归查询功能的,那 ...

  3. mysql树节点路径,关于mysql:从使用物化路径编码树的表中选择,按深度优先排序(无递归/ ltree)...

    我在关系数据库中有一个表,其中我使用称为物化路径(也称为Lineage列)的技术对树进行编码. 也就是说,对于我树中的每个节点,我在表中有一行,并且对于每一行,我有一个名为ancestry的字符串列, ...

  4. MYSQL 递归树表函数

    向下遍历 DROP FUNCTION IFEXISTS queryChildrenAreaInfo;DELIMITER;; CREATE FUNCTION queryChildrenAreaInfo ...

  5. Mysql转Oracle的经验分享

    目录 一.背景 二.历程 1.数据库准备 2.工具选择 3.表结构迁移(先解决可能存在的问题) 1)命名长度超长 2)命名重复 3)列重复创建索引 4)创建唯一索引失败 5)模型转换 6)脚本大小写处 ...

  6. mysql 查询树形结构_MySql/Oracle树形结构查询

    Oracle树形结构递归查询 在Oracle中,对于树形查询可以使用start with ... connect by select * from treeTable start with id='1 ...

  7. PostgreSQL递归查询父节点

    MySQL.PostgreSQL递归查询父节点 id parent_id name 1 null 生产部门 2 null 质量部门 3 null 管理部门 4 null 生产部门 5 null 研发部 ...

  8. 机构层级列表递归展示查询,并优化SQL查询

    文章目录 问题背景 原始方案 ①按照层级进行递归查询 ② 定义递归体进行递归查询 ③ 查询结果(部分省略截图) ④原始方案总结 优化需求 优化方案 ①查询出所有机构信息作为数据源,后面使用代码手动处理 ...

  9. 学成在线项目开发技巧整理---第一部分

    学成在线项目开发技巧整理---第一部分 1.数据字典 2.http-client远程测试插件,可以保存测试数据 3.三种跨域解决 4.具有多层级数据查询思路 5.Mybaits分页插件原理 6.根据文 ...

  10. mysql递归sql_SQL如何实现MYSQL的递归查询,SQL实现MYSQL递归

    猿哥解读 本文的亮点在于很多PHPer肯定不知道MySQL还能这么用. 所周知,目前的mysql版本中并不支持直接的递归查询,但是通过递归到迭代转化的思路,还是可以在一句SQL内实现树的递归查询的.这 ...

最新文章

  1. Mysql学习总结(41)——MySql数据库基本语句再体会
  2. ie下LI的间距问题
  3. Python--format()学习记录
  4. MyBatis-学习笔记01【01.Mybatis课程介绍及环境搭建】
  5. 【Servlet】Filter过滤器详解、使用示例
  6. H5页面在 ios 端滑动不流畅的问题
  7. 同一工作组无法访问_工作组,域
  8. VS2022+.NET6 RC1+C#10,.NET开发起飞
  9. mac解压rar命令_苹果mac电脑上很好用的免费压缩软件?ezip压缩软件分享
  10. nginx之反向代理服务器
  11. 【ElasticSearch】es ResourceWatcherService 的 初始化 启动 源码解析
  12. for update行级锁的作用
  13. sublime press key “escape” can't type anything
  14. Cherry,你会喜欢这种手机!
  15. (剑指Offer)面试题37:两个链表的第一个公共结点
  16. NSIS添加everyone权限
  17. Summery of the first homework
  18. 数据预处理之数据缩放
  19. ROSMoveit中机械臂的点动(Jog)实现
  20. 如何终止forEach循环

热门文章

  1. Thinkphp3.2.3 SQL注入漏洞
  2. fmea第五版pfmea表格_第五版PFMEA模板(含附属评分准则编写指南全套EXCEL表)
  3. 黑马程序员Java教程学习笔记(一)
  4. C++转Java快速入门
  5. 【MFC开发(15)】进度条控件Progress Control
  6. SpringBoot 中使用 QuzartZ
  7. 海量视频资源【网盘直接取】
  8. 象棋名手手机版2019最新版_象棋名手超强版下载
  9. 关于银行项目的软件测试_关于软件测试
  10. EDA技术实用教程 | 复习三 | 不同类型的赋值语句