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

在MySQL中,处理层次结构数据(如树状或组织结构图)的查询

1.mysql表结构如下

CREATE TABLE `division` (`id` int NOT NULL AUTO_INCREMENT COMMENT 'id',`parent_code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '上级代码',`code` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '代码',`division_type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '行政类型',`name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '名称',`status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '状态',`create_time` datetime NOT NULL COMMENT '录入时间',PRIMARY KEY (`id`) USING BTREE,KEY `UK_division_code` (`code`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=3220 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='行政区域';

2.sql如下

WITH RECURSIVE org_path AS (-- 递归的起点:选择根组织(假设根组织的super_id为NULL或某个特定值)SELECT code, name, CAST(name AS CHAR(255)) AS org_pathFROM division WHERE parent_code='-1' -- 或者使用具体的根组织ID,如 super_id = 1UNION ALLSELECT o.code, o.name, CONCAT(p.org_path, ' -> ', o.name)FROM division oINNER JOIN org_path p ON o.parent_code  = p.code
)
SELECT * FROM org_path
ORDER BY org_path; 

3.效果就是省市区就会拼接起来,数据如下

code          name   org_path
310000	上海市	上海市
310100	上海市	上海市 -> 上海市
310114	嘉定区	上海市 -> 上海市 -> 嘉定区
310120	奉贤区	上海市 -> 上海市 -> 奉贤区
310113	宝山区	上海市 -> 上海市 -> 宝山区
310151	崇明区	上海市 -> 上海市 -> 崇明区
310104	徐汇区	上海市 -> 上海市 -> 徐汇区
310107	普陀区	上海市 -> 上海市 -> 普陀区
310110	杨浦区	上海市 -> 上海市 -> 杨浦区
310117	松江区	上海市 -> 上海市 -> 松江区

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 国家网络安全战略
  • 新160个crackme - 027-MexeliteCRK1
  • 深度学习:记一次由model.train() 引发的模型训练效果变差事故
  • 纯手工在内网部署一个Docker私有仓库
  • 【RISC-V设计-09】- RISC-V处理器设计K0A之CIC
  • android10 系统定制:增加应用锁功能
  • DS1302实时时钟(51单片机)
  • Flink cdc正确打开方式(flink on yarn)
  • Kotlin 和 Java区别
  • Netty学习笔记01--出入站处理器顺序
  • 学习记录702@计算机组成原理之计算机硬件组成细化
  • FFmpeg源码:av_packet_move_ref、av_packet_make_refcounted函数分析
  • C语言典型例题32
  • ElementUI修改主题色
  • 【Pytorch】topk函数
  • 【Leetcode】104. 二叉树的最大深度
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • ERLANG 网工修炼笔记 ---- UDP
  • ES10 特性的完整指南
  • jquery ajax学习笔记
  • leetcode-27. Remove Element
  • Linux各目录及每个目录的详细介绍
  • Linux快速复制或删除大量小文件
  • Median of Two Sorted Arrays
  • Mysql数据库的条件查询语句
  • Nacos系列:Nacos的Java SDK使用
  • Nodejs和JavaWeb协助开发
  • Spark RDD学习: aggregate函数
  • 从零开始的无人驾驶 1
  • 对话 CTO〡听神策数据 CTO 曹犟描绘数据分析行业的无限可能
  • 今年的LC3大会没了?
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 山寨一个 Promise
  • 使用common-codec进行md5加密
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 2017年360最后一道编程题
  • # Panda3d 碰撞检测系统介绍
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (二)c52学习之旅-简单了解单片机
  • (附源码)ssm高校运动会管理系统 毕业设计 020419
  • (强烈推荐)移动端音视频从零到上手(上)
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)jdk与jre的区别
  • (转)jQuery 基础
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .gitignore
  • .Net Core中的内存缓存实现——Redis及MemoryCache(2个可选)方案的实现
  • .net6解除文件上传限制。Multipart body length limit 16384 exceeded
  • .pyc文件是什么?
  • // an array of int
  • @html.ActionLink的几种参数格式