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 05 MySQL
解决MySQL存储时间出现不一致的问题
Apr 28 MySQL
mysql备份策略的实现(全量备份+增量备份)
Jul 07 MySQL
mysql事务隔离级别详情
Oct 24 MySQL
一文带你探究MySQL中的NULL
Nov 11 MySQL
一次SQL如何查重及去重的实战记录
Mar 13 MySQL
mysql 获取时间方式
Mar 20 MySQL
关于MySQL临时表为什么可以重名的问题
Mar 22 MySQL
MySQL中一条SQL查询语句是如何执行的
Apr 08 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
Apr 09 MySQL
解决MySQL报“too many connections“错误
Apr 19 MySQL
MySQL 字符集 character
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
php 删除记录同时删除图片文件的实现代码
2010/05/12 PHP
深入讲解PHP Session及如何保持其不过期的方法
2015/08/18 PHP
PHP创建XML接口示例
2019/07/04 PHP
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/03 Javascript
Javascript学习笔记-详解in运算符
2011/09/13 Javascript
简单的邮箱登陆的提示效果类似于yahoo邮箱
2014/02/26 Javascript
form.submit()不能提交表单的错误原因及解决方法
2014/10/13 Javascript
jQuery插件EnPlaceholder实现输入框提示文字
2015/06/05 Javascript
Javascript验证Visa和MasterCard信用卡号的方法
2015/07/27 Javascript
jQuery中的基本选择器用法学习教程
2016/04/14 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
微信小程序 增、删、改、查操作实例详解
2017/01/13 Javascript
使用vue构建一个上传图片表单
2017/07/04 Javascript
JavaScript学习笔记之基于定时器实现图片无缝滚动功能详解
2019/01/09 Javascript
vue-cli中vue本地实现跨域调试接口
2019/01/16 Javascript
JS实现简单的表格增删
2020/01/16 Javascript
[05:22]DOTA2 2015国际邀请赛中国区预选赛首日TOP10
2015/05/26 DOTA
跟老齐学Python之有点简约的元组
2014/09/24 Python
Python内建函数之raw_input()与input()代码解析
2017/10/26 Python
mac安装pytorch及系统的numpy更新方法
2018/07/26 Python
django解决跨域请求的问题详解
2019/01/20 Python
机器学习实战之knn算法pandas
2019/06/22 Python
Django框架安装方法图文详解
2019/11/04 Python
仿CSDN Blog返回页面顶部功能实现原理及代码
2013/06/30 HTML / CSS
YII2 全局异常处理深入讲解
2021/03/24 PHP
仓库门卫岗位职责
2013/12/22 职场文书
彩色的翅膀教学反思
2014/04/25 职场文书
党的群众路线对照检查材料思想汇报(学校)
2014/10/04 职场文书
荆州古城导游词
2015/02/06 职场文书
军训个人总结
2015/03/03 职场文书
酒店人事专员岗位职责
2015/04/07 职场文书
党支部考察意见范文
2015/06/02 职场文书
检举信的写法
2019/04/10 职场文书
《鲁滨逊漂流记》之六读后感(4篇)
2019/09/29 职场文书
MySQL数字类型自增的坑
2021/05/07 MySQL
Python3中PyQt5简单实现文件打开及保存
2021/06/10 Python