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

相关推荐
程序新视界35 分钟前
在MySQL中,是否可以使用UUID作为主键?
数据库·后端·mysql
晓py1 小时前
InnoDB 事务日志机制全流程详解|从 SQL 到崩溃恢复的完整旅程
数据库·sql·oracle
爱考证的小刘1 小时前
MySQL OCP认证和Oracle OCP认证分别是什么?
mysql·mysql数据库·数据库mysql·oracle数据库·oracle19c·oracle认证·mysql自学
挨踢攻城1 小时前
Oracle OCP认证:深度解析与实战指南
mysql·oracle·dba·开闭原则·ocp·公众号:厦门微思网络·数据库专家
白帽子黑客杰哥1 小时前
湖湘杯网络安全技能大赛参与形式
数据库·web安全·渗透测试·安全演练·湖湘杯·实战演练
寒秋丶3 小时前
Milvus:Json字段详解(十)
数据库·人工智能·python·ai·milvus·向量数据库·rag
ManageEngineITSM7 小时前
技术的秩序:IT资产与配置管理的现代重构
大数据·运维·数据库·重构·工单系统
档案宝档案管理9 小时前
档案宝:企业合同档案管理的“安全保险箱”与“效率加速器”
大数据·数据库·人工智能·安全·档案·档案管理
wangjialelele10 小时前
mysql库操作二
数据库·mysql