MySQL 子集查向上的父级,父级查询向下的所有子集

好记忆不如烂笔头,能记下点东西,就记下点,有时间拿出来看看,也会发觉不一样的感受.

目录

概括

表结构如下

通过父级ID查询子集的业务SQL

通过子集ID查询父级的ID信息


概括

在实际使用中,通过父级ID查询下面所有子集的业务需求,同时也会有通过子集ID查询上级父级的ID信息。

表结构如下

以部门结构表为例

CREATE TABLE m_sys_dept (

dept_id int NOT NULL AUTO_INCREMENT COMMENT '主键id',

name varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '部门名称',

parent_id bigint DEFAULT '0' COMMENT '父id',

sort int NOT NULL DEFAULT '0' COMMENT '排序',

PRIMARY KEY (dept_id) USING BTREE

) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='部门管理';

通过父级ID查询子集的业务SQL

SELECT a.* FROM (SELECT * FROM m_sys_dept WHERE del_flag = 0) a ,

(SELECT @pcode := 42384) b

WHERE FIND_IN_SET(parent_id, @pcode) > 0

AND @pcode := concat(@pcode, ',', dept_id)

union select * from m_sys_dept where dept_id = 42384 ;

42384 是要填入的节点ID

通过子集ID查询父级的ID信息

WITH RECURSIVE parent_nodes AS (

SELECT * FROM m_sys_dept WHERE dept_id = 731466 -- 子节点的id

UNION ALL

SELECT n.* FROM m_sys_dept n

JOIN parent_nodes p ON p.parent_id = n.dept_id

)

SELECT * FROM parent_nodes;

731466 是子节点的ID

相关推荐
zhengfei6113 分钟前
开源网站安全监测系统—Libra
数据库·安全·oracle
点云SLAM6 分钟前
boost中graph_traits和adjacency_list 的内存布局以及最小图示例
数据结构·数据库·图论·boost库·最小图·链接矩阵·graph_traints技术
微风中的麦穗6 分钟前
K8s(kubernetes)部署Mivus向量数据库集群 在线和离线两种部署方式
数据库
Go高并发架构_王工9 分钟前
Redis命令执行原理与源码分析:深入理解内部机制
数据库·redis·后端
佛系DBA11 分钟前
数据库性能之旅(四)关于NULL值
数据库·postgresql
学习3人组15 分钟前
Conda虚拟环境迁移指南导出依赖库并跨设备重建环境
java·数据库·conda
hgz071019 分钟前
MySQL索引数据结构:B+树 vs 哈希索
数据库·sql·mysql
GISERLiu20 分钟前
Mapper 怎么能找到实体和数据库
数据库·oracle·mybatis
技术不打烊21 分钟前
MySQL锁机制全解:彻底理解行锁、表锁与死锁原理
数据库·mysql
云老大TG:@yunlaoda36027 分钟前
华为云国际站代理商如何使用EDCM进行跨账号代维?
大数据·数据库·华为云