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 相关文章推荐
如何使用Maxwell实时同步mysql数据
Apr 08 MySQL
MySQL Innodb关键特性之插入缓冲(insert buffer)
Apr 08 MySQL
MySQL Router的安装部署
Apr 24 MySQL
MySQL中distinct与group by之间的性能进行比较
May 26 MySQL
MySQL系列之五 视图、存储函数、存储过程、触发器
Jul 02 MySQL
MySQL系列之九 mysql查询缓存及索引
Jul 02 MySQL
MySQL深度分页(千万级数据量如何快速分页)
Jul 25 MySQL
MySQL利用UNION连接2个查询排序失效详解
Nov 20 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
关于MySQL临时表为什么可以重名的问题
Mar 22 MySQL
一次Mysql update sql不当引起的生产故障记录
Apr 01 MySQL
pt-archiver 主键自增
Apr 26 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字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
一个PHP的远程图片抓取函数分享
2013/09/25 PHP
typecho插件编写教程(六):调用接口
2015/05/28 PHP
PHP中Enum(枚举)用法实例详解
2015/12/07 PHP
深入理解PHP之OpCode原理详解
2016/06/01 PHP
PHP微信API接口类
2016/08/22 PHP
php curl中gzip的压缩性能测试实例分析
2016/11/08 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
JavaScript Cookie的读取和写入函数
2009/12/08 Javascript
解决js正则匹配换行问题实现代码
2012/12/10 Javascript
AngularJS基础知识
2014/12/21 Javascript
浅谈js中的闭包
2015/03/16 Javascript
鼠标经过子元素触发mouseout,mouseover事件的解决方案
2015/07/26 Javascript
window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
2015/11/11 Javascript
基于jquery实现动态竖向柱状条特效
2016/02/12 Javascript
Angular实现购物车计算示例代码
2017/02/21 Javascript
详解Angular路由之路由守卫
2018/05/10 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
微信小程序实现拨打电话功能的示例代码
2020/06/28 Javascript
js实现点击选项置顶动画效果
2020/08/25 Javascript
vue使用exif获取图片旋转,压缩的示例代码
2020/12/11 Vue.js
[07:57]2018DOTA2国际邀请赛寻真——PSG.LGD凤凰浴火
2018/08/12 DOTA
粗略分析Python中的内存泄漏
2015/04/23 Python
详解使用python crontab设置linux定时任务
2016/12/08 Python
Python实现的统计文章单词次数功能示例
2019/07/08 Python
Python 使用元类type创建类对象常见应用详解
2019/10/17 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
Python 没有main函数的原因
2020/07/10 Python
css3 pointer-events 介绍详解
2017/09/18 HTML / CSS
HTML5添加鼠标悬浮音响效果不使用FLASH
2014/04/23 HTML / CSS
函授本科毕业生自我鉴定
2013/10/16 职场文书
个人事迹材料范文
2014/12/29 职场文书
公诉意见书范文
2015/06/05 职场文书
导游词之铁岭象牙山
2019/12/06 职场文书
Python djanjo之csrf防跨站攻击实验过程
2021/05/14 Python
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
2021/06/26 MySQL