mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构


Posted in MySQL onApril 20, 2022

前言

查询上下级机构,这个功能可能会在日常工作中遇到,如果使用的oracle数据库,那就很简单,只需要使用oracle提供的层级查询即可实现。如果使用的mysql数据库,那么就需要自己实现这个功能。下面就介绍mysql实现上下级机构查询。

思路:

  • 自定义mysql方法
  • 利用mysql中的【FIND_IN_SET】【group_concat】两个方法

(1)准备测试数据表

CREATE TABLE `org_test` (
  `org_no` varchar(32) NOT NULL COMMENT '机构编号',
  `org_name` varchar(200) NOT NULL COMMENT '机构名称',
  `p_org_no` varchar(32) DEFAULT NULL COMMENT '上级机构编号',
  PRIMARY KEY (`org_no`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

测试数据

INSERT INTO `org_test` VALUES ('1001', '福建省', null);
INSERT INTO `org_test` VALUES ('100101', '厦门市', '1001');
INSERT INTO `org_test` VALUES ('10010101', '思明区', '100101');
INSERT INTO `org_test` VALUES ('10010102', '湖里区', '100101');
INSERT INTO `org_test` VALUES ('10010103', '同安区', '100101');
INSERT INTO `org_test` VALUES ('100102', '福州市', '1001');

(2)查询指定机构的所有下级机构(包括自身)

delimiter $$
CREATE FUNCTION getOrgChild (orgNo varchar(32)) RETURNS varchar(1000) CHARSET utf8
BEGIN
	-- 定义临时变量
	DECLARE tmpOrg varchar(1000) DEFAULT '';
	-- 循环查询,orgNo不为空,则循环
	WHILE orgNo IS NOT NULL DO
		-- 拼接所有查询结果
		IF tmpOrg = '' THEN
			SET tmpOrg = CONCAT(tmpOrg, orgNo);
		ELSE
			SET tmpOrg = CONCAT(tmpOrg, ',', orgNo);
		END IF;
		-- 查询数据
		SELECT group_concat(org_no) INTO orgNo FROM org_test WHERE FIND_IN_SET(p_org_no, orgNo) > 0;
	END WHILE;
	
	-- 返回结果
	RETURN tmpOrg;
END $$

测试结果:

mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构

(3)查询指定机构的所有上级机构(包括自身)

delimiter $$
CREATE FUNCTION getOrgParent (orgNo varchar(32)) RETURNS varchar(1000) CHARSET utf8
BEGIN
	-- 定义临时变量
	DECLARE tmpOrg varchar(1000) DEFAULT '';
	-- 循环查询,orgNo不为空,则循环
	WHILE orgNo IS NOT NULL DO
		-- 拼接所有查询结果
		IF tmpOrg = '' THEN
			SET tmpOrg = CONCAT(tmpOrg, orgNo);
		ELSE
			SET tmpOrg = CONCAT(tmpOrg, ',', orgNo);
		END IF;
		-- 查询数据
		SELECT group_concat(p_org_no) INTO orgNo FROM org_test WHERE FIND_IN_SET(org_no, orgNo) > 0;
	END WHILE;
	
	-- 返回结果
	RETURN tmpOrg;
END $$

测试结果:

mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构

总结

到此这篇关于mysql查询上下级机构的文章就介绍到这了!

MySQL 相关文章推荐
mysql知识点整理
Apr 05 MySQL
MySQL触发器的使用
May 24 MySQL
MySql 8.0及对应驱动包匹配的注意点说明
Jun 23 MySQL
Node-Red实现MySQL数据库连接的方法
Aug 07 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
MySQL中一条update语句是如何执行的
Mar 16 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
Mysql表数据比较大情况下修改添加字段的方法实例
Jun 28 MySQL
jdbc中自带MySQL 连接池实践示例
Jul 23 MySQL
一文解答什么是MySQL的回表
Aug 05 MySQL
MySQL中dd::columns表结构转table过程及应用详解
Sep 23 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
Dec 24 MySQL
在MySQL中你成功的避开了所有索引
Apr 20 #MySQL
mysql中如何用命令创建联合唯一索引
Apr 20 #MySQL
mysql 8.0.27 绿色解压版安装教程及配置方法
MySQL去除密码登录告警的方法
Apr 20 #MySQL
MySQL数据库事务的四大特性
Windows 64位 安装 mysql 8.0.28 图文教程
分析MySQL优化 index merge 后引起的死锁
You might like
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
使用ob系列函数实现PHP网站页面静态化
2014/08/13 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
简单实现php上传文件功能
2017/09/21 PHP
thinkPHP5框架中widget的功能与用法详解
2018/06/11 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
JS 控制CSS样式表
2009/08/20 Javascript
javascript中的window.location.search方法简介
2013/09/02 Javascript
JS小功能(onmouseover实现选择月份)实例代码
2013/11/28 Javascript
javascript创建和存储cookie示例
2014/01/07 Javascript
Javascript毫秒数用法实例
2015/02/05 Javascript
js实现鼠标滑过文字链接色彩变化的效果
2015/05/06 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
Bootstrap开关(switch)控件学习笔记分享
2016/05/30 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
Javascript中获取浏览器类型和操作系统版本等客户端信息常用代码
2016/06/28 Javascript
JavaScript中String对象的方法介绍
2017/01/04 Javascript
js实现弹窗暗层效果
2017/01/16 Javascript
vue-cli3.0使用及部分配置详解
2018/08/29 Javascript
高效测试用例组织算法pairwise之Python实现方法
2017/07/19 Python
python的unittest测试类代码实例
2017/12/07 Python
django用户注册、登录、注销和用户扩展的示例
2018/03/19 Python
详解flask表单提交的两种方式
2018/07/21 Python
python3实现网页版raspberry pi(树莓派)小车控制
2020/02/12 Python
Python列表推导式实现代码实例
2020/09/09 Python
Python3利用openpyxl读写Excel文件的方法实例
2021/02/03 Python
代码中finally中的代码会不会执行
2012/02/06 面试题
自考自我鉴定范文
2013/10/30 职场文书
领导接待方案
2014/03/13 职场文书
解除财产保全担保书
2014/05/20 职场文书
个人主要事迹材料
2014/08/26 职场文书
雷峰塔导游词
2015/02/09 职场文书
接待员岗位职责
2015/02/13 职场文书
2015年学习部工作总结范文
2015/03/31 职场文书
MYSQL数据库使用UTF-8中文编码乱码的解决办法
2021/05/26 MySQL