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

相关推荐
大维25 分钟前
DBX 实测:从 SQLite 查询到 MiniMax-M3 自然语言生成 SQL
数据库·sql·sqlite
玖米GEO运营王总监1 小时前
2026年账号矩阵协同效应怎么量化:三个指标与公式结构
java·大数据·数据库
景煜拾年2 小时前
InnoAI SQL 助手
运维·数据库·笔记·sql
.痞老板.3 小时前
mysql初阶--数据类型
android·数据库·mysql
Risehuxyc3 小时前
MySQL密码插件
数据库·mysql
腾科IT教育4 小时前
Oracle考试全解析:OCP、OCM认证体系与核心考点备考指南
数据库·oracle·开闭原则
叼烟扛炮14 小时前
Linux 学习笔记(五十六):IO 多路复用初探——select 的“三宗罪”
linux·服务器·数据库·笔记·学习·php
.痞老板.16 小时前
mysql初阶--数据库基础
数据库·mysql
城北徐宫17 小时前
MySQL约束条件一览
数据库·mysql
码农小河6617 小时前
基于SSM+JSP+MySQL的在线医疗服务系统的设计与实现
java·开发语言·mysql