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中你可能忽略的COLLATION实例详解
May 12 MySQL
my.ini优化mysql数据库性能的十个参数(推荐)
May 26 MySQL
Navicat连接MySQL错误描述分析
Jun 02 MySQL
SQL实现LeetCode(175.联合两表)
Aug 04 MySQL
MySQL 用 limit 为什么会影响性能
Sep 15 MySQL
Mysql排序的特性详情
Nov 01 MySQL
教你使用VS Code的MySQL扩展管理数据库的方法
Jan 22 MySQL
MySQL为数据表建立索引的原则详解
Mar 03 MySQL
MySQL8.0 Undo Tablespace管理详解
Jun 16 MySQL
MySQL数据库表约束讲解
Jun 21 MySQL
数据设计之权限的实现
Aug 05 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
PHP插入排序实现代码
2013/04/04 PHP
php获取网页请求状态程序示例
2014/06/17 PHP
php使用curl通过代理获取数据的实现方法
2016/05/16 PHP
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
innerHTML 和 getElementsByName 在IE下面的bug 的解决
2010/04/09 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
jQuery控制cookie过期时间的方法
2015/04/07 Javascript
javascript中$(function() {});写与不写有哪些区别
2015/08/10 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
JS实现屏蔽网页右键复制及ctrl+c复制的方法【2种方法】
2016/09/04 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
node Buffer缓存区常见操作示例
2019/05/04 Javascript
IE浏览器下JS脚本提交表单后,不能自动提示问题解决方法
2019/06/04 Javascript
vue通过video.js解决m3u8视频播放格式的方法
2019/07/30 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
Python实现抓取网页生成Excel文件的方法示例
2017/08/05 Python
深入理解Tensorflow中的masking和padding
2020/02/24 Python
pycharm如何实现跨目录调用文件
2020/02/28 Python
Django choices下拉列表绑定实例
2020/03/13 Python
Python面向对象多态实现原理及代码实例
2020/09/16 Python
python如何获得list或numpy数组中最大元素对应的索引
2020/11/16 Python
意大利消费电子产品购物网站:SLG Store
2019/12/26 全球购物
养殖项目策划书范文
2014/01/13 职场文书
《晚上的太阳》教学反思
2014/04/23 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
求职简历自我评价范文
2015/03/10 职场文书
青春雷锋观后感
2015/06/10 职场文书
看雷锋电影观后感
2015/06/10 职场文书
经典祝酒词大全
2015/08/12 职场文书
环保建议书作文300字
2015/09/14 职场文书
PHP实现两种排课方式
2021/06/26 PHP
Vue OpenLayer测距功能的实现
2022/04/20 Vue.js
python数字图像处理之图像的批量处理
2022/06/28 Python