当前位置: 首页 > article >正文

Mysql树形结构表-查询所有子集数据

  • 表结构,这里只是个例子,所有的树形结构表均可用:
CREATE TABLE `zhkt_course_chapter` (
  `id` bigint NOT NULL COMMENT '唯一id',
  `course_id` bigint NOT NULL COMMENT '所属课程id',
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '名称',
  `parent_id` bigint NOT NULL DEFAULT '0' COMMENT '父级id,根级父级为0,默认0',
  `status` int DEFAULT '0' COMMENT '状态:0正常,1禁用,默认0',
  `sort` int DEFAULT NULL COMMENT '排序字段',
  `deleted` tinyint DEFAULT '0' COMMENT '逻辑删除:0未删除,1删除,默认0',
  `version` int DEFAULT NULL COMMENT '版本',
  `create_by` bigint DEFAULT NULL COMMENT '创建者id',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` bigint DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='智慧课堂-课程章节表';
  1. 查询子集sql,包含自己:
    WITH RECURSIVE chapter_tree AS (
        SELECT id, parent_id, name
        FROM zhkt_course_chapter
        WHERE id = 1833077834931814401 -- 这里替换为具体的ID值
        UNION ALL
        SELECT c.id, c.parent_id, c.name
        FROM zhkt_course_chapter c
        JOIN chapter_tree ct ON c.parent_id = ct.id
        WHERE c.deleted = 0 -- 假设只查询未被逻辑删除的记录
    )
    SELECT * FROM chapter_tree;
  2. 查询子集sql,不包含自己:
    WITH RECURSIVE chapter_tree AS (
        -- 种子部分:从给定ID开始
        SELECT id, parent_id, name
        FROM zhkt_course_chapter
        WHERE id = 1833078203409809409 -- 这里替换为具体的ID值
        
        UNION ALL
        
        -- 递归部分:查找子节点
        SELECT c.id, c.parent_id, c.name
        FROM zhkt_course_chapter c
        JOIN chapter_tree ct ON c.parent_id = ct.id
        WHERE c.deleted = 0 -- 假设只查询未被逻辑删除的记录
    )
    -- 最终查询:选择所有子节点,但排除初始ID
    SELECT * FROM chapter_tree
    WHERE id != 1833078203409809409; -- 排除初始ID

http://www.kler.cn/a/307152.html

相关文章:

  • 使用 Visual Studio Installer 彻底卸载 Visual Studio方法与下载
  • C# 委托与匿名方法
  • vue2或vue3的name属性有什么作用?
  • ❤React-JSX语法认识和使用
  • Linux手动安装nginx
  • 第8章利用CSS制作导航菜单
  • 【OJ刷题】快慢指针问题
  • ARM驱动学习之基础小知识
  • Windows环境本地部署Oracle 19c及卸载实操手册
  • STL-vector练习题
  • 【2025届华为秋招机考三道编程题之一】华为校招留学生软件开发工程师-真题机考笔试/(200分)- 跳格子3(Java JS Python C)
  • 【C++】模板进阶:深入解析模板特化
  • 【数据库】MySQL内置函数
  • Args4j:Java命令行参数解析的利器
  • Java 入门指南:JVM(Java虚拟机)垃圾回收机制 —— 死亡对象判断方法
  • uniapp自定义导航栏以及页面加背景
  • CSP-J算法基础 计数排序
  • mis_table.cs 与 csharp_mis_table.h
  • Oracle(121)如何进行数据文件的恢复?
  • Linux中使用Docker构建Nginx容器完整教程
  • k8s使用本地docker私服启动自制的flink集群
  • OKHttp实现原理分享
  • vue3 指定元素全屏 screenfull(可直接粘贴使用)
  • 《凡人歌》:网络安全组电话响3声必须接,安全组长被压迫患得惊恐症、抑郁症
  • HTTP跨域请求时为什么要发送options请求
  • 【LLMs对抗性提示:提示泄漏、非法行为、DAN、Waluigi效应、 游戏模拟器、防御策略————】