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时间设置注意事项的深入总结
May 06 MySQL
mysql对于模糊查询like的一些汇总
May 09 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
ORM模型框架操作mysql数据库的方法
Jul 25 MySQL
MySQL千万级数据表的优化实战记录
Aug 04 MySQL
一次MySQL启动导致的事故实战记录
Sep 15 MySQL
为什么MySQL 删除表数据 磁盘空间还一直被占用
Oct 16 MySQL
一条 SQL 语句执行过程
Mar 17 MySQL
Innodb存储引擎中的后台线程详解
Apr 03 MySQL
MySQL 计算连续登录天数
May 11 MySQL
MySQL串行化隔离级别(间隙锁实现)
Jun 16 MySQL
mysql sock 文件解析及作用讲解
Jul 15 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/js获取客户端mac地址的实现代码
2013/07/08 PHP
PHP中is_dir()函数使用指南
2015/05/08 PHP
js判断生效时间不得大于失效时间的思路及代码
2013/04/23 Javascript
js实现精美的图片跟随鼠标效果实例
2015/05/16 Javascript
jQuery仿京东商城楼梯式导航定位菜单
2016/07/25 Javascript
原生ajax处理json格式数据的实例代码
2016/12/25 Javascript
js 去掉字符串前后空格实现代码集合
2017/03/25 Javascript
angularJs中跳转到指定的锚点实例($anchorScroll)
2018/08/31 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】
2020/04/28 Javascript
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
初步解析Python下的多进程编程
2015/04/28 Python
Python数据类型详解(一)字符串
2016/05/08 Python
Python实现时钟显示效果思路详解
2018/04/11 Python
python 实现分页显示从es中获取的数据方法
2018/12/26 Python
Python音频操作工具PyAudio上手教程详解
2019/06/26 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
python线程信号量semaphore使用解析
2019/11/30 Python
解决jupyter notebook显示不全出现框框或者乱码问题
2020/04/09 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
2020/05/19 Python
基于pandas向csv添加新的行和列
2020/05/25 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
利用python查看数组中的所有元素是否相同
2021/01/08 Python
美国市场上最实惠的送餐服务:Dinnerly
2018/03/18 全球购物
英国家庭和商业健身器材购物网站:Fitness Options
2018/07/05 全球购物
英国领先的体验日提供商:Buyagift
2019/04/19 全球购物
资深地理教师自我评价
2013/09/21 职场文书
伊索寓言教学反思
2014/05/01 职场文书
运动会口号8字
2014/06/07 职场文书
超市创业计划书
2014/09/15 职场文书
2015年世界水日活动总结
2015/02/09 职场文书
5.12护士节活动总结
2015/02/10 职场文书
小学科学课教学反思
2016/02/23 职场文书
python分分钟绘制精美地图海报
2022/02/15 Python
python中mongodb包操作数据库
2022/04/19 Python