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

相关推荐
渣波15 小时前
拒绝 SQL 焦虑!手把手带你用 NestJS + Prisma + DTO 写出“防弹”级后端代码
javascript·数据库·后端
Jim6001 天前
【吃透 MySQL InnoDB连载】第 1 章・解密线上数据库高频故障
mysql
GreatSQL2 天前
gt-checksum v4.0.0 新功能解读系列文章(4):SSL 加密连接——数据校验传输安全再升级
mysql
倔强的石头_2 天前
KingbaseES 新版MySQL 兼容版体验:旧版迁移 + 功能实测
数据库
倔强的石头_5 天前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
云技纵横5 天前
唯一索引 INSERT 死锁实战:5 秒复现交叉插入的 S 锁循环等待
sql·mysql
沉默王二5 天前
面试官:RAG 不用向量数据库,用 MySQL 硬扛?我:100 万向量不是很轻松?
mysql·面试·ai编程
冬奇Lab5 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
小猿姐5 天前
MySQL Top 10 热点问题 AI 运维实战:从内核诊断到云原生运维
mysql·云原生·aiops