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

相关推荐
人工智能知识库4 分钟前
2026年HCCDP-GaussDB工作级开发者题库(详细解析)
数据库·华为·gaussdb·题库·hccdp-gaussdb·工作级开发者认证
爱吃土豆的马铃薯ㅤㅤㅤㅤㅤㅤㅤㅤㅤ19 分钟前
sql 如果字段为空就用另一个字段
数据库·sql
一人の梅雨20 分钟前
亚马逊SP-API商品评论接口实战:情感分析+商业洞察挖掘的差异化方案
运维·前端·数据库
qq_4351395724 分钟前
多级缓存(Caffeine+Redis)技术实现文档
数据库·redis·缓存
程序修理员26 分钟前
oracle备份表还原
数据库·oracle
韩立学长33 分钟前
【开题答辩实录分享】以《兴趣班预约管理系统的设计与实现》为例进行选题答辩实录分享
java·mysql·intellij idea
科创致远39 分钟前
国内ESOP电子作业系统头部企业格局与科创致远技术发展历程
大数据·数据库·人工智能·嵌入式硬件·精益工程
超级种码1 小时前
Redis:Redis持久化机制
数据库·redis·bootstrap
阿里-于怀1 小时前
AgentScope AutoContextMemory:告别 Agent 上下文焦虑
android·java·数据库·agentscope
数据库那些事儿1 小时前
从极速复制“死了么”APP,看AI编程时代的技术选型
数据库