美文网首页
Mysql递归查询

Mysql递归查询

作者: Austin_Brant | 来源:发表于2018-06-04 17:12 被阅读0次

ms sqlserver数据库,支持with as 语法中直接递归调用。但mysql并不支持with as 语法,只能将with as的过程封装成函数,然后在查询中进行调用。

创建表,并添加测试数据

创建表

DROP TABLE IF EXISTS vrv_org_tab; 
CREATE TABLE vrv_org_tab ( 
  id bigint(8) NOT NULL AUTO_INCREMENT, 
  org_name varchar(50) NOT NULL, 
  org_level int(4) NOT NULL DEFAULT '0', 
  org_parent_id bigint(8) NOT NULL DEFAULT '0', 
  PRIMARY KEY (id), 
  UNIQUE KEY unique_org_name (org_name) 
) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8;

添加数据

INSERT INTO vrv_org_tab VALUES ('1', '北信源', '1', '0'); 
INSERT INTO vrv_org_tab VALUES ('2', '北京', '2', '1'); 
INSERT INTO vrv_org_tab VALUES ('3', '南京', '2', '1'); 
INSERT INTO vrv_org_tab VALUES ('4', '武汉', '2', '1'); 
INSERT INTO vrv_org_tab VALUES ('5', '上海', '2', '1'); 
INSERT INTO vrv_org_tab VALUES ('6', '北京研发中心', '3', '2'); 
INSERT INTO vrv_org_tab VALUES ('7', '南京研发中心', '3', '3'); 
INSERT INTO vrv_org_tab VALUES ('8', '武汉研发中心', '3', '4'); 
INSERT INTO vrv_org_tab VALUES ('9', '上海研发中心', '3', '5'); 
INSERT INTO vrv_org_tab VALUES ('10', '北京EMM项目组', '4', '6'); 
INSERT INTO vrv_org_tab VALUES ('11', '北京linkdd项目组', '4', '6'); 
INSERT INTO vrv_org_tab VALUES ('12', '南京EMM项目组', '4', '7'); 
INSERT INTO vrv_org_tab VALUES ('13', '南京linkdd项目组', '4', '7'); 
INSERT INTO vrv_org_tab VALUES ('14', '武汉EMM项目组', '4', '8'); 
INSERT INTO vrv_org_tab VALUES ('15', '武汉linkdd项目组', '4', '8'); 
INSERT INTO vrv_org_tab VALUES ('16', '上海EMM项目组', '4', '9'); 
INSERT INTO vrv_org_tab VALUES ('17', '上海linkdd项目组', '4', '9');

根据父id递归查询所有子节点

创建函数

DROP FUNCTION IS EXIST getChildrenOrg;
DELIMITER //
CREATE function getChildrenOrg(orgid INT)
returns varchar(4000)
BEGIN
DECLARE oTemp VARCHAR(4000);
DECLARE oTempChild VARCHAR(4000);

SET oTemp = '';
SET oTempChild = CAST(orgid AS CHAR);

WHILE oTempChild IS NOT NULL
DO
SET oTemp = CONCAT(oTemp,',',oTempChild);
SELECT GROUP_CONCAT(id) INTO oTempChild FROM vrv_org_tab WHERE FIND_IN_SET(org_parent_id,oTempChild) > 0;
END WHILE;
RETURN oTemp;
END
//
DELIMITER ;

根据函数查询

# 查询组织机构为1的下面所有组织机构
select * from vrv_org_tab where FIND_IN_SET(id, getChildrenOrg(1));

相关文章

  • MySQL

    mysql递归查询组织机构mysql 递归查询 MySQL教程之concat以及group_concat的用法 M...

  • mysql实现递归查询

    mysql中没有提供递归查询的语句,我们通过mysql函数实现这种查询。 对于如下一张表privilege,递归查...

  • 教你如何使用 MySQL8 递归

    之前写过一篇 MySQL通过自定义函数的方式,递归查询树结构,从MySQL 8.0 开始终于支持了递归查询的语法 ...

  • 【MySQL】递归查询上下级

    环境 需要MySQL8.0+ 上下级关系图 建表语句 查询上下级sql语句 递归,查询本级以及所有下级 递归,查询...

  • Mysql递归查询

    ms sqlserver数据库,支持with as 语法中直接递归调用。但mysql并不支持with as 语法,...

  • mysql递归查询

    在项目中会遇到同一个表中保存着父子关系的数据,最常见的就是处理树形结构资源。下面举个简单的例子,先看一下表: 然后...

  • mysql递归查询

    表如上: 调动语句:

  • (十七)MySQL递归查询

    表定义 测试数据 递归查询指定父节点下面的所有子节点数据 获取pid=‘ROOT’的所有节点及下级节点 获取所在层...

  • MYSQL 递归查询示例

  • MySql 递归层次查询(父子查询)

    前言 最近遇到了一个问题,在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询?在Oracle中...

网友评论

      本文标题:Mysql递归查询

      本文链接:https://www.haomeiwen.com/subject/sayysftx.html