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 慢查询日志深入理解
Apr 22 MySQL
浅谈Mysql多表连接查询的执行细节
Apr 24 MySQL
MySql学习笔记之事务隔离级别详解
May 12 MySQL
Mysql基础知识点汇总
May 26 MySQL
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
Jun 21 MySQL
详解MySQL多版本并发控制机制(MVCC)源码
Jun 23 MySQL
MySQL中连接查询和子查询的问题
Sep 04 MySQL
SQL实战演练之网上商城数据库商品类别数据操作
Oct 24 MySQL
SpringBoot连接MySQL获取数据写后端接口的操作方法
Nov 02 MySQL
将MySQL的表数据全量导入clichhouse库中
Mar 21 MySQL
Mysql查询时间区间日期列表,不会由于数据表数据影响
Apr 19 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 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实现的四则运算表达式计算实现代码
2011/08/02 PHP
PHP加密扩展库Mcrypt安装和实例
2013/11/10 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
js获取网页高度(详细整理)
2012/12/28 Javascript
js模仿hover的具体实现代码
2013/12/30 Javascript
setinterval()与clearInterval()JS函数的调用方法
2015/01/21 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
【JS+CSS3】实现带预览图幻灯片效果的示例代码
2016/03/17 Javascript
jQuery使用正则表达式限制文本框只能输入数字
2016/06/18 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
jQuery基于函数重载实现自定义Alert函数样式的方法
2016/07/27 Javascript
JS 实现banner图片轮播效果(鼠标事件)
2017/08/04 Javascript
nodejs实现超简单生成二维码的方法
2018/03/17 NodeJs
微信小程序如何调用图片接口API并居中显示
2019/06/29 Javascript
js 实现 list转换成tree的方法示例(数组到树)
2019/08/18 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
js实现QQ邮箱邮件拖拽删除功能
2020/08/27 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
Python学生成绩管理系统简洁版
2020/04/05 Python
python简单实现操作Mysql数据库
2018/01/29 Python
基于python中theano库的线性回归
2018/08/31 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
解决Python3 被PHP程序调用执行返回乱码的问题
2019/02/16 Python
Python 离线工作环境搭建的方法步骤
2019/07/29 Python
Lookfantastic西班牙官网:英国知名美妆购物网站
2018/06/13 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
应用化学专业本科生求职信
2013/09/29 职场文书
《花木兰》教学反思
2014/04/09 职场文书
学生期末评语大全
2014/04/30 职场文书
家长建议怎么写
2014/05/15 职场文书
2014中学教师节广播稿
2014/09/10 职场文书
医院营销工作计划
2015/01/16 职场文书
慰问信模板
2015/02/14 职场文书
送给火锅店的创意营销方案!
2019/07/08 职场文书