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

相关推荐
不会就选b9 分钟前
MySQL之视图
数据库·mysql
>no problem<30 分钟前
基于cola5.0的基础设施层的多数据库切换方案思路
数据库·spring boot·mybatisplus·cola5.0·数据库迁移适配
OceanBase数据库官方博客32 分钟前
OceanBase 赋能央国企:从发电到用电的全链路业务承载
数据库·oceanbase
瀚高PG实验室2 小时前
pgsql-ogr-fdw
数据库·postgresql·瀚高数据库·highgo
IvorySQL2 小时前
PostgreSQL 技术日报 (6月5日)|PG19 Beta1 上线,PGConf.PL 2026开启征稿
数据库·postgresql·区块链
abcy0712132 小时前
pycharm python sqlalchemy mysql增删改查实例csdn
数据库·oracle
无风听海2 小时前
IndexedDB 深度指南 浏览器中的事务型对象数据库
前端·数据库
咋吃都不胖lyh3 小时前
langgraph基础示例
数据库
网管NO.13 小时前
子查询进阶|EXISTS/IN/ANY/ALL,优化查询效率
数据库·sql
云服务器租用费用4 小时前
2026年腾讯云OpenClaw(Clawdbot)+Skills云上部署及Windows本地集成轻松入门
运维·服务器·数据库·windows·云计算·腾讯云