树形结构在Mysql 相关业务查询

本文总结了在MySQL中处理树形结构数据的两种常见查询需求:获取指定节点的所有上级节点和所有子级节点。通过示例SQL查询语句,详细解析了如何利用递归和FIND_IN_SET函数来实现这些操作。对于数据库开发者和管理员来说,掌握这些技巧对于处理层级关系的数据至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

平常我们在开发难免会遇到树形结构的表结构,今天我们针对树形结构在Mysql 中两个查询需求做个总结,以及查询sql 具体分析

简单树形建表

CREATE TABLE `tb_tree` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `code_num` BIGINT(20) DEFAULT NULL,
  `parent_code_num` BIGINT(20) DEFAULT NULL,
  `code_name` VARCHAR(20) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8 COMMENT='树形分类';

树形关系图

在这里插入图片描述

需求以及分析

一、 指定节点获取该节点的所有上级节点

Mysql 查询

-- 获取指定节点的所有父节点
SELECT 
  T2.code_num,
  T2.code_name 
FROM
  (SELECT 
    @r AS _id,
    (SELECT 
      @r := parent_code_num 
    FROM
      tb_tree 
    WHERE code_num = _id) AS parent_id,
    @l := @l + 1 AS lvl 
  FROM
    (SELECT 
      @r := 1,
      @l := 0) vars,
    tb_tree h) T1 
  JOIN tb_tree T2 
    ON T1._id = T2.code_num 
ORDER BY T1.lvl DESC 
效果图

在这里插入图片描述

二、 指定节点获取该节点的所有孩子节点

Mysql 查询
SELECT 
  code_num AS codeNum 
FROM
  (SELECT 
    id,
    parent_code_num,
    code_num 
  FROM
    tb_tree) T1,
  (SELECT 
    @pid := 1) T2 
WHERE FIND_IN_SET(parent_code_num, @pid) > 0 
  AND @pid := CONCAT(@pid, ',', code_num) ;


效果图

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛乌龟一起走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值