如何查询组织结构(组织结构树)

news2024/10/6 8:34:13

创建简单的组织表

  • 字段1: 组织ID
  • 字段2:组织名称
  • 字段3:组织的父级ID
-- 创建组织结构表
CREATE TABLE organization (
    id VARCHAR(36) PRIMARY KEY,
    name VARCHAR(100),
    parent_id VARCHAR(36)
);

插入几条数据

INSERT INTO organization (id, name, parent_id)
VALUES
    ("00", '组织A', NULL),
    ("11", '组织B', NULL),
    ("0001", '子组织A1', "00"),
    ("0002", '子组织A2', "00"),
    ("1101", '子组织B1', "11"),
    ("1102", '子组织B2', "11"),
    ("000101", '子组织A1.1', "0001"),
    ("000102", '子组织A1.2', "0001"),
    ("000201", '子组织A2.1', "0002"),
    ("000202", '子组织A2.2', "0002"),
    ("110101", '子组织B1.1', "1101"),
    ("110102", '子组织B1.2', "1101"),
    ("110201", '子组织B2.1', "1102"),
    ("110202", '子组织B2.2', "1102");

查询组织

1、查询所有三级组织

  • sql
SELECT 
    parent.id AS parent_id,
    parent.name AS parent_name,
    child1.id AS child1_id,
    child1.name AS child1_name,
    child2.id AS child2_id,
    child2.name AS child2_name
FROM 
    organization AS parent
JOIN 
    organization AS child1 ON parent.id = child1.parent_id
JOIN 
    organization AS child2 ON child1.id = child2.parent_id
WHERE 
    parent.parent_id IS NULL
  • 输出结果
    在这里插入图片描述

2、查询A组织下的所有组织(查第一级下的所有组织)

因为这里的ID都是有规律,前缀可以识别,所以使用用like模糊查询,如果ID不能通过前缀来判别,则不能使用。

  • sql
SELECT 
    parent.id AS parent_id,
    parent.name AS parent_name,
    child1.id AS child1_id,
    child1.name AS child1_name,
    child2.id AS child2_id,
    child2.name AS child2_name
FROM 
    organization AS parent
JOIN 
    organization AS child1 ON parent.id = child1.parent_id
JOIN 
    organization AS child2 ON child1.id = child2.parent_id
WHERE 
    parent.parent_id IS NULL  and child2.id like '00%';
  • 输出结果
    在这里插入图片描述

3、查询B1组织下的所有组织(查第二级下的所有组织)

还是使用前缀的特点模糊查询。

  • sql
SELECT 
    parent.id AS parent_id,
    parent.name AS parent_name,
    child1.id AS child1_id,
    child1.name AS child1_name,
    child2.id AS child2_id,
    child2.name AS child2_name
FROM 
    organization AS parent
JOIN 
    organization AS child1 ON parent.id = child1.parent_id
JOIN 
    organization AS child2 ON child1.id = child2.parent_id
WHERE 
    parent.parent_id IS NULL  and child2.id like '1101%';
  • 输出结果在这里插入图片描述

4、查询B1.1组织(具体的第三级组织)

  • sql
SELECT 
    parent.id AS parent_id,
    parent.name AS parent_name,
    child1.id AS child1_id,
    child1.name AS child1_name,
    child2.id AS child2_id,
    child2.name AS child2_name
FROM 
    organization AS parent
JOIN 
    organization AS child1 ON parent.id = child1.parent_id
JOIN 
    organization AS child2 ON child1.id = child2.parent_id
WHERE 
    parent.parent_id IS NULL  and child2.id like '110101%';
  • 输出结果
    在这里插入图片描述

5、mybatis的写法

使用mybatis的xml写sql时,只需要使用#{ID}进行参数替换,并拼接就行。

<where>
	<if test="id != null and id != ''">
		id like CONCAT(#{id}, '%')
	</if>
</where>

无前缀规律

1、查询B组织下的所有组织

SELECT 
    parent.id AS parent_id,
    parent.name AS parent_name,
    child1.id AS child1_id,
    child1.name AS child1_name,
    child2.id AS child2_id,
    child2.name AS child2_name
FROM 
    organization AS parent
JOIN 
    organization AS child1 ON parent.id = child1.parent_id
JOIN 
    organization AS child2 ON child1.id = child2.parent_id
WHERE 
    parent.id = "11"; -- 要查询的组织B的id

2、查询B1组织下的所有组织

SELECT 
    parent.id AS parent_id,
    parent.name AS parent_name,
    child1.id AS child1_id,
    child1.name AS child1_name,
    child2.id AS child2_id,
    child2.name AS child2_name
FROM 
    organization AS parent
JOIN 
    organization AS child1 ON parent.id = child1.parent_id
JOIN 
    organization AS child2 ON child1.id = child2.parent_id
WHERE 
    child1.id = "1101"; -- 要查询的组织B1的id

3、查询第三级B1.1组织

SELECT 
    parent.id AS parent_id,
    parent.name AS parent_name,
    child1.id AS child1_id,
    child1.name AS child1_name,
    child2.id AS child2_id,
    child2.name AS child2_name
FROM 
    organization AS parent
JOIN 
    organization AS child1 ON parent.id = child1.parent_id
JOIN 
    organization AS child2 ON child1.id = child2.parent_id
WHERE 
    child2.id = "110101"; -- 要查询的组织B1.1的id

4、mybatis的xml的sql写法

这里idOne是第一级ID,idTwo是第二级ID,idThree是第三级ID,并且只能传一个,这样传第一级时才能查出下面的所有组织。

<where>
	<if test="idOne != null and idOne != ''">
		parent.id = #{idOne}
	</if>
	<if test="idTwo != null and idTwo != ''">
		child1.id = #{idTwo}
	</if>
	<if test="idThree != null and idThree != ''">
		child2.id = #{idThree}
	</if>
</where>

这是我目前能想到的方法,大家都更好的解决方案,可以一起交流。

结束!!!!!
hy:19


						人而不学,其犹正墙面而立。--《尚书》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/727761.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

3D模型轻量化开发工具HOOPS与WebGL的对比分析

HOOPS是一种商业级的3D开发平台&#xff0c;由Tech Soft 3D公司开发。它提供了一套全面的工具和API&#xff0c;用于构建和展示高度复杂的3D场景和模型&#xff0c;可以在多个平台和环境中使用&#xff0c;包括Web、移动设备和桌面&#xff0c;这使得开发者能够在不同的设备上展…

Spring的事务隔离

随着应用程序复杂性的增加&#xff0c;数据库的并发读写需求也越来越高。对于一个电商平台而言&#xff0c;每天都会有数十万笔的交易数据需要处理&#xff0c;这就需要能够高效地处理并发事务。Spring作为一个强大的应用框架&#xff0c;提供了事务管理的功能&#xff0c;可以…

WhaleStudio 完成与涛思数据 TDengine 产品相互兼容性测试认证

近日&#xff0c;WhaleStudio 与涛思数据 TDengine 产品已完成相互兼容性测试认证。 白鲸开源与涛思数据的联合测试结果显示&#xff0c;Whalestudio 平台与涛思数据 TDengine 产品双方产品完全兼容&#xff0c;整体运行稳定高效。 WhaleStudio 是白鲸开源科技根据全球领先的 …

如何在海外推广一个新品牌?

在海外推广一个新品牌时&#xff0c;以下是一些步骤和策略可以帮助你&#xff1a; 1、 市场调研&#xff1a;了解目标海外市场的文化、消费者行为和偏好&#xff0c;以及竞争情况。这将帮助你了解如何定位你的品牌&#xff0c;并制定相应的推广策略。 2、 品牌定位和价值观&am…

ARM半主机模式介绍

文章目录 什么是半主机参考链接&#xff1a; 什么是半主机 半主机是一种机制&#xff0c;它使运行在arm目标上的代码能够在运行调试器的主机上通信和使用输入/输出功能。 这些工具包括键盘输入&#xff0c;屏幕输出和磁盘I/O。例如&#xff0c;你可以使用这种机制来启用C库中的…

华为OD机试真题 Python 实现【新员工座位安排系统】【2022Q4 100分】,附详细解题思路

目录 一、题目描述二、输入描述三、输出描述四、解题思路五、Python算法源码六、效果展示1、输入2、输出3、说明 一、题目描述 工位由序列F1,F2…Fn组成&#xff0c;Fi值为0、1或2。其中0代表空置&#xff0c;1代表有人&#xff0c;2代表障碍物。 1、某一空位的友好度为左右连…

【MySQL】幻读被彻底解决了吗?

一、MySQL 幻读被彻底解决了吗 MySQL InnoDB 引擎的默认隔离级别虽然是【可重复读】&#xff0c;但是它很大程度上避免幻读现象&#xff08;并不是完全解决了&#xff09;&#xff0c;解决的方案有两种&#xff1a; 针对快照读&#xff08;普通 select 语句&#xff09;&#…

Element-UI 在表单通过按钮动态增加Tree树形控件

文章目录 问题背景动态增加的Tree控件创建el-tree控件数据动态增加的el-tree控件编辑数据前需进行设置勾选状态新增/编辑请求前需转换格式 问题背景 在表单中动态增加的Tree控件中&#xff0c;注册一个 ref 引用&#xff0c;报错如下&#xff1a; this.$refs[‘showRegionsTre…

Linux下Qt breakpad编译使用

一、下载安装包 下载qbreakpad源码&#xff1a; git clone https://github.com/buzzySmile/qBreakpad.git下载breakpad源码 git clone https://github.com/google/breakpad下载linux-syscall-support 没有这个文件&#xff0c;编译报错 git clone https://github.com/adels…

Stable Diffusion WebUI Ubuntu 22.04 LTS RTX2060 6G 极限显存出图

模型 默认选中 chilloutmix_Ni.safetensors&#xff0c;重启webui.sh进程 正向词 best quality, ultra high res, (photorealistic:1.4), 1girl, <lora:koreanDollLikeness_v15:1> ,<lora:yaeMikoRealistic_yaemikoMixed:1>, 反向词 paintings, sketches, (…

数字万用表的四种妙用方法

数字万用表&#xff08;Digital Multimeter&#xff0c;简称DMM&#xff09;是一种在电子电路测试和维修中常用的仪器。它可以测量电压、电流、电阻等各种电信号参数&#xff0c;同时还可以测试二极管、晶体管等元器件。数字万用表使用数字显示&#xff0c;具有高精度、易读性好…

SQL高级教程第三章

SQL CREATE DATABASE 语句 CREATE DATABASE 语句 CREATE DATABASE 用于创建数据库。 SQL CREATE DATABASE 语法 CREATE DATABASE database_name SQL CREATE DATABASE 实例 现在我们希望创建一个名为 "my_db" 的数据库。 我们使用下面的 CREATE DATABASE 语句&…

SQL19 分组过滤练习题

selectuniversity,round(avg(question_cnt), 3) as avg_question_cnt,round(avg(answer_cnt), 3) as avg_answer_cnt fromuser_profile group byuniversity havingavg_question_cnt < 5or avg_answer_cnt < 20;

抖音矩阵系统源码部署技术分享--基于抖音开放平台

开发概述 开放平台基于开发者诉求和相关平台规则&#xff0c;提供了两种开放模式&#xff1a;能力开放、行业开放。 自研开发者介绍 自研开发者是指有自己的自营业务&#xff0c;或是有多种加盟方的角色&#xff0c;可以基于用户需求&#xff0c;提供完整的技术解决方案。 …

【Redis】高可用之二:哨兵(sentinel)

本文是Redis系列第5篇&#xff0c;前4篇欢迎移步 【Redis】不卡壳的 Redis 学习之路&#xff1a;从十大数据类型开始入手_AQin1012的博客-CSDN博客关于Redis的数据类型&#xff0c;各个文章总有些小不同&#xff0c;我们这里讨论的是Redis 7.0&#xff0c;为确保准确&#xff…

dockerfile常用指令

Dockerfile常用指令 视频学习资料来源这里&#xff0c;点击本行文字即可跳转&#xff0c;讲的比较详细&#xff0c;不过比较老&#xff0c;跟最新的肯定是有一些差异的 Dockerfile官网文档的话点击这里 中文文档可以看看这个&#xff0c;不过没有详细的代码demo 或者是看这个 或…

3. 日志模块(下)

在日志模块的上篇中&#xff0c;我们详细拆解了 MyBatis 是如何整合第三方日志框架&#xff0c;实现了完善的日志功能的。那么在本节中&#xff0c;我们再来具体分析下&#xff1a;为了实现“将日志功能优雅地嵌入到核心流程中&#xff0c;实现无侵入式地日志打印”这一目标&am…

菜谱APP项目实战,可以魔改任意APP——前后端齐全

菜谱APP开发实战&#xff08;可改任意APP&#xff09; 1. 优点 多平台性 由于此APP开发的时候采用的是 uni-app 来开发的&#xff0c;所以说它可以打包成多种形态&#xff0c;在各种平台上进行使用。比如&#xff1a;微信、支付宝等各种小程序。当然也是可以打包成安卓APP&am…

如何学习 Midjourney 绘画,AI绘图

Midjourney 是至今为止最好的 AI 绘图工具&#xff0c;SD还是差了很多。 要用当然用最好的&#xff0c;为了绘制出更符合心意的图&#xff0c;我开始 Midjourney 的学习。 从各种渠道寻找相关的资料&#xff0c;国内国外&#xff0c;或者星球&#xff0c;或者群聊&#xff0c…

简析住宅小区有序充电价格响应的电动汽车有充电策略

安科瑞电气股份有限公司 上海嘉定 201801 摘要&#xff1a;在住宅小区传统建设模式下&#xff0c;充电桩安装难、配套投资大&#xff0c;严重阻碍了充电桩在小区内进行普及使用。为解决该问题&#xff0c;本文首先调研了住宅小区内的电动汽车用户的出行习惯和充电特点&#xf…