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 infobright的安装步骤
Apr 07 MySQL
超详细教你怎么升级Mysql的版本
May 19 MySQL
MySQL完整性约束的定义与实例教程
May 30 MySQL
MySQL里面的子查询的基本使用
Aug 02 MySQL
MySQL空间数据存储及函数
Sep 25 MySQL
一文带你探究MySQL中的NULL
Nov 11 MySQL
Mysql外键约束的创建与删除的使用
Mar 03 MySQL
浅谈如何保证Mysql主从一致
Mar 13 MySQL
MySQL创建管理RANGE分区
Apr 13 MySQL
MySQL如何使备份得数据保持一致
May 02 MySQL
mysql查找连续出现n次以上的数字
May 11 MySQL
mysql函数之截取字符串的实现
Aug 14 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引用(&)各种使用方法实例详解
2014/03/20 PHP
php过滤输入操作之htmlentities与htmlspecialchars用法分析
2017/02/17 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
Javascript技术技巧大全(五)
2007/01/22 Javascript
理解Javascript_02_理解undefined和null
2010/10/11 Javascript
JavaScript监听文本框回车事件并过滤文本框空格的方法
2015/04/16 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
jquery中键盘事件小结
2016/02/24 Javascript
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
2018/08/25 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
零基础写python爬虫之使用urllib2组件抓取网页内容
2014/11/04 Python
零基础写python爬虫之打包生成exe文件
2014/11/06 Python
python实现linux下使用xcopy的方法
2015/06/28 Python
Python的爬虫包Beautiful Soup中用正则表达式来搜索
2016/01/20 Python
利用Python中unittest实现简单的单元测试实例详解
2017/01/09 Python
python实现BackPropagation算法
2017/12/14 Python
Python实现XML文件解析的示例代码
2018/02/05 Python
浅谈Python反射 & 单例模式
2019/03/21 Python
解决pycharm运行程序出现卡住scanning files to index索引的问题
2019/06/27 Python
python实现可变变量名方法详解
2019/07/01 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
树莓派升级python的具体步骤
2020/07/05 Python
Python 转移文件至云对象存储的方法
2021/02/07 Python
匡威比利时官网:Converse Belgium
2017/04/13 全球购物
程序员经常用到的UNIX命令
2015/04/13 面试题
学校食堂采购员岗位职责
2013/12/05 职场文书
建材投资建议书
2014/05/16 职场文书
公司离职证明范本
2014/10/17 职场文书
追悼会家属答谢词
2015/09/29 职场文书
SpringBoot整合MongoDB的实现步骤
2021/06/23 MongoDB
Python Matplotlib库实现画局部图
2021/11/17 Python
Eclipse+Java+Swing+Mysql实现电影购票系统(详细代码)
2022/01/18 Java/Android
MySQL数据库如何给表设置约束详解
2022/03/13 MySQL