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之高可用集群部署及故障切换实现
Apr 22 MySQL
MySQL 存储过程的优缺点分析
May 20 MySQL
mysql在项目中怎么选事务隔离级别
May 25 MySQL
MySQL 查询速度慢的原因
May 25 MySQL
Mysql 如何查询时间段交集
Jun 08 MySQL
MySql 缓存查询原理与缓存监控和索引监控介绍
Jul 02 MySQL
SQL 聚合、分组和排序
Nov 11 MySQL
MySQL创建定时任务
Jan 22 MySQL
MySQL的索引你了解吗
Mar 13 MySQL
MySQL 数据库范式化设计理论
Apr 22 MySQL
MySQL 数据表操作
May 04 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
mysql limit查询优化分析
2008/11/12 PHP
php源码加密 仿微盾PHP加密专家(PHPCodeLock)
2010/05/06 PHP
跟我学Laravel之快速入门
2014/10/15 PHP
PHP 9 大缓存技术总结
2015/09/17 PHP
鼠标移到导航当前位置的LI变色处于选中状态
2013/08/23 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
jQuery实现下滑菜单导航效果代码
2015/08/25 Javascript
JS实现可关闭的对联广告效果代码
2015/09/14 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
JavaScript基础知识及常用方法总结
2016/01/10 Javascript
jquery对象访问是什么及使用方法介绍
2016/05/03 Javascript
Javascript动画效果(3)
2016/10/11 Javascript
JavaScript中的 attribute 和 jQuery中的 attr 方法浅析
2017/01/04 Javascript
使用vue.js写一个tab选项卡效果
2017/03/25 Javascript
BootStrap数据表格实例代码
2017/09/13 Javascript
用vue写一个仿简书的轮播图的示例代码
2018/03/13 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
详解基于vue的服务端渲染框架NUXT
2018/06/20 Javascript
webpack file-loader和url-loader的区别
2019/01/15 Javascript
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
vue 中的动态传参和query传参操作
2020/11/09 Javascript
python实时获取外部程序输出结果的方法
2019/01/12 Python
Django models.py应用实现过程详解
2019/07/29 Python
浅析python,PyCharm,Anaconda三者之间的关系
2019/11/27 Python
Python求解排列中的逆序数个数实例
2020/05/03 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
python 制作本地应用搜索工具
2021/02/27 Python
详解淘宝H5 sign加密算法
2020/08/25 HTML / CSS
美国廉价机票预订网站:Cheapfaremart
2018/04/28 全球购物
财务出纳员岗位职责
2013/11/26 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
七年级历史教学反思
2014/02/05 职场文书
学生打架检讨书
2014/02/14 职场文书
初中军训感想
2015/08/07 职场文书
幼儿园大班教学反思
2016/03/02 职场文书