mysql 中with的用法(3)

有表(tb),数据如下:
在这里插入图片描述

请用SQL,生成如下的样式:
在这里插入图片描述
一、建表


CREATE TABLE `tb` (
  `id` varchar(3) DEFAULT NULL,
  `pid` varchar(3) DEFAULT NULL,
  `name` varchar(64) DEFAULT NULL
) 
INSERT INTO tb (id, pid, name) VALUES('002', '0', '浙江省');
INSERT INTO tb (id, pid, name) VALUES('001', '0', '广东省');
INSERT INTO tb (id, pid, name) VALUES('003', '002', '衢州市');
INSERT INTO tb (id, pid, name) VALUES('004', '002', '杭州市');
INSERT INTO tb (id, pid, name) VALUES('005', '002', '湖州市');
INSERT INTO tb (id, pid, name) VALUES('006', '002', '嘉兴市');
INSERT INTO tb (id, pid, name) VALUES('007', '002', '宁波市');
INSERT INTO tb (id, pid, name) VALUES('008', '002', '绍兴市');
INSERT INTO tb (id, pid, name) VALUES('009', '002', '台州市');
INSERT INTO tb (id, pid, name) VALUES('010', '002', '温州市');
INSERT INTO tb (id, pid, name) VALUES('011', '002', '丽水市');
INSERT INTO tb (id, pid, name) VALUES('012', '002', '金华市');
INSERT INTO tb (id, pid, name) VALUES('013', '002', '舟山市');
INSERT INTO tb (id, pid, name) VALUES('014', '004', '上城区');
INSERT INTO tb (id, pid, name) VALUES('015', '004', '下城区');
INSERT INTO tb (id, pid, name) VALUES('016', '004', '拱墅区');
INSERT INTO tb (id, pid, name) VALUES('017', '004', '余杭区');
INSERT INTO tb (id, pid, name) VALUES('018', '011', '金东区');
INSERT INTO tb (id, pid, name) VALUES('019', '001', '广州市');
INSERT INTO tb (id, pid, name) VALUES('020', '001', '深圳市')

二、解决SQL:

第一种写法:

-- 创建一个递归公共表达式(CTE)来获取多层级行政区域数据
WITH RECURSIVE location_cte AS (
  -- 初始选择基础条件,即pid为0的记录,表示省级行政区域
  SELECT 
    id, 
    pid, 
    name,
    0 AS level  -- 初始层级为0
  FROM tb
  WHERE pid = 0
  
  -- 递归部分:联接递归表达式自身以获取下一级行政区域
  UNION ALL
  
  SELECT 
    tb.id, 
    tb.pid, 
    tb.name,
    location_cte.level + 1  -- 层级加1
  FROM tb
  JOIN location_cte ON tb.pid = location_cte.id
)

-- 最终查询:基于递归CTE获取所需的数据
SELECT 
  t1.name AS shen,  -- 选择省级行政区域的名称
  t2.name AS shi,   -- 选择市级行政区域的名称
  t3.name AS qu     -- 选择区级行政区域的名称
FROM location_cte t1  -- 使用递归CTE作为基础表t1,表示省级行政区域
LEFT JOIN location_cte t2 ON t1.id = t2.pid AND t2.pid <> 0  -- t1和t2自连接,获取市级行政区域数据
LEFT JOIN location_cte t3 ON t2.id = t3.pid  -- t2和t3自连接,获取区级行政区域数据
WHERE t1.pid = 0  -- 筛选条件:选择省级行政区域
ORDER BY t1.id, t2.id, t3.id;  -- 根据ID值排序结果

此SQL首先使用递归CTE从表中获取多层级行政区域数据,
然后基于这个CTE进行查询。在注释中,我解释了初始选择条件、递归部分和最终查询以及每个部分的作用。

第二种写法:

SELECT  -- 开始选择需要返回的字段  
t1.name AS shen,  -- 选择t1表中的name字段,并将其命名为shen  
t2.name AS shi,  -- 选择t2表中的name字段,并将其命名为shi  
t3.name AS qu  -- 选择t3表中的name字段,并将其命名为qu  
FROM tb t1  -- 从名为tb的表中选择数据,并将该表别名为t1  
LEFT JOIN tb t2 ON t1.id = t2.pid AND t2.pid <> 0  -- 使用左连接将t1表与t2表连接在一起,连接条件是t1.id等于t2.pid且t2.pid不等于0  
LEFT JOIN tb t3 ON t2.id = t3.pid  -- 使用左连接将t2表与t3表连接在一起,连接条件是t2.id等于t3.pid  
WHERE t1.pid = 0  -- 过滤条件,只选择pid字段等于0的记录  
ORDER BY t1.id, t2.id, t3.id;  -- 对返回的结果进行排序,排序顺序是先按照t1.id排序,然后按照t2.id排序,最后按照t3.id排序

展示效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/156273.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

场效应管(MOSFET)笔记-nmos和pmos仿真测试

一、场效应管的介绍 场效应管是一种半导体器件&#xff0c;它可以用来放大或者控制电流。根据结构的不同&#xff0c;场效应管可以分为结型场效应管&#xff08;JFET&#xff09;和绝缘栅场效应管&#xff08;MOSFET&#xff09;。其中&#xff0c;JFET是由一个pn结构组成&…

系列二、垃圾

一、什么是垃圾 简单的说&#xff0c;垃圾就是内存中已经不再被使用到的空间就是垃圾。 二、 如何判断一个对象是否可以被回收 2.1、引用计数法 Java中&#xff0c;引用和对象是有关联的&#xff0c;如果要操作对象则必须要用引用进行。因此判断一个对象是否可以被回收&#x…

21款奔驰E300L升级HUD抬头显示 绚丽多彩的展示

随着科技飞速地发展&#xff0c;从汽车领域就可以看出&#xff0c;尤其是汽车的抬头显示器&#xff0c;一经推出就吸引了很多的车主。 升级HUD抬头显示&#xff0c;HUD与汽车系统进行完整的数据信息连接&#xff0c;整合成大数据&#xff0c;然后将一些重要信息映射到车窗玻璃…

2243. 计算字符串的数字和

2243. 计算字符串的数字和 Java&#xff1a;以 k 为步长进行跳&#xff01;然后再延伸k class Solution {public String digitSum(String s, int k) {while (s.length() > k) {int n s.length();StringBuilder sb new StringBuilder(); // sb存&#xff01;for (int i …

禁止文件外发,企业文件禁止外发

禁止文件外发&#xff0c;企业文件禁止外发 禁止文件外发是企业信息安全策略中的一项重要措施&#xff0c;用于防止敏感数据或机密文件被员工无意或有意地传送到外部&#xff0c;也是企业数据防泄密的一种方法&#xff0c;从而保护企业数据的安全性和保密性。 下载使用安企神…

PDF控件Spire.PDF for .NET【转换】演示:将PDF 转换为 HTML

由于各种原因&#xff0c;您可能想要将 PDF 转换为 HTML。例如&#xff0c;您需要在社交媒体上共享 PDF 文档或在网络上发布 PDF 内容。在本文中&#xff0c;您将了解如何使用Spire.PDF for .NET在 C# 和 VB.NET 中将 PDF 转换为 HTML。 Spire.Doc 是一款专门对 Word 文档进行…

【鸿蒙应用ArkTS开发系列】- 云开发入门简介

目录 概述开发流程工程概览工程模板工程结构 工程创建与配置 概述 HarmonyOS云开发是DevEco Studio新推出的功能&#xff0c;可以让您在一个项目工程中&#xff0c;使用一种语言完成端侧和云侧功能的开发。 基于AppGallery Connect Serverless构建的云侧能力&#xff0c;开发…

怎样备份电脑文件最安全

怎样备份电脑文件最安全 数据对一家公司来说是非常重要的资产&#xff0c;数据备份是非常重要的&#xff0c;主要是为了保护数据免受意外损失、文件损坏、硬件故障、恶意软件攻击、盗窃或灾难性事件等影响。 下载使用安企神电脑屏幕监控软件 备份电脑文件最安全的方法包括&am…

MS90C385B——+3.3V 150MHz 的 24bit 平板显示器(FPD) LVDS 信号发送器

MS90C385B 芯片能够将 28bit 的 TTL 数据转换成 4 通道的低压差分 信号 (LVDS) 。时钟通道经过锁相之后&#xff0c;与数据通道并行输出。当时钟频 率为 150MHz 时&#xff0c; 24bit 的 RGB 数据、 3bit 的 LCD 时序数据和 1bit 的控 制数据以 1050Mbps…

安装SSL证书有什么意义?

在当今的数字化时代&#xff0c;网络安全已经成为了一个重要的议题。为了保护网站和用户数据的安全&#xff0c;许多网站都选择了安装SSL证书。同时&#xff0c;很多用户不明白安装SSL证书到底有什么意义&#xff1f; 一、网站实现加密传输 用户通过http协议访问网站时&#x…

AI监管规则:各国为科技监管开辟了不同的道路

AI监管规则&#xff1a;各国为科技监管开辟了不同的道路 一份关于中国、欧盟和美国如何控制AI的指南。 编译 李升伟 茅 矛 &#xff08;特趣生物科技有限公司&#xff0c;广东深圳&#xff09; 插图&#xff1a;《自然》尼克斯宾塞 今年5月&#xff0c;科技公司OpenAI首席…

uniapp App 端 版本更新检测

function checkVersion() { var req { //升级检测数据 appid: plus.runtime.appid, version: plus.runtime.version }; const timestamp Date.parse(new Date()); config.server.query_news uni.reque…

《持续交付:发布可靠软件的系统方法》- 读书笔记(十五)

持续交付&#xff1a;发布可靠软件的系统方法&#xff08;十五&#xff09; 第 15 章 持续交付管理15.1 引言15.2 配置与发布管理成熟度模型15.3 项目生命周期15.3.1 识别阶段15.3.2 启动阶段15.3.3 初始阶段15.3.4 开发与发布15.3.5 运营阶段 15.4 风险管理流程15.4.1 风险管理…

解决Windows Server 2022启动PowerShell出现乱码问题

解决 PowerShell 控制台中字符被乱码的问题 文章目录 乱码问题现象乱码问题原因乱码解决方法1. 从cmd.exe启动 PowerShell2. 更改 PowerShell 控制台中的字体 推荐阅读 乱码问题现象 Windows Server 2022启动 PowerShell 控制台时&#xff0c;字符会出现乱码。 此问题已知仅会…

【数据结构】树与二叉树(十七):二叉树的基础操作:删除指定结点及其左右子树(算法DST)

文章目录 5.2.1 二叉树二叉树性质引理5.1&#xff1a;二叉树中层数为i的结点至多有 2 i 2^i 2i个&#xff0c;其中 i ≥ 0 i \geq 0 i≥0。引理5.2&#xff1a;高度为k的二叉树中至多有 2 k 1 − 1 2^{k1}-1 2k1−1个结点&#xff0c;其中 k ≥ 0 k \geq 0 k≥0。引理5.3&…

workman使用手册1.0

workman官网地址&#xff1a;高性能PHP应用容器 workerman 1&#xff1a;把workman项目放到linux服务器后&#xff0c;需要启动你的php文件&#xff0c;才可以使用 定位到项目根目录&#xff1a;例&#xff1a;cd /mnt/workman 启动代码&#xff1a;php outin.php start -d 停…

Spring Task单机定时任务(使用及阻塞问题解决)

一、介绍 SpringTask是Spring自主研发的定时任务工具&#xff0c;并且存在于Spring体系中&#xff0c;不需要添加任何依赖 Spring Boot 默认在无任何第三方依赖的情况下使用 spring-context 模块下提供的定时任务工具 Spring Task。 我们只需要使用 EnableScheduling 注解就可…

Unity - Cinemachine

动态获取Cinemachine的内部组件 vCam.GetCinemachineComponent<T>() 动态修改Cinemachine的Transposer属性 var vCamComp transfrom.GetComponent<CinemachineVirtualCamera>(); var transposerComp vCamComp.GetCinemachineComponent<CinemachineTransposer&…

【Linux】gcc/g++ gdb 使用

目录 1&#xff0c;背景知识 2&#xff0c;gcc 如何完成 1&#xff0c;预处理(进行宏替换) 2&#xff0c;编译&#xff08;生成汇编&#xff09; 3&#xff0c;汇编&#xff08;生成机器可识别代码&#xff09; 4&#xff0c;连接&#xff08;生成可执行文件或库文件&…

SpringCloud微服务:Nacos快速入门

目录 第一步&#xff1a;cloud-demo的pom文件 第二步&#xff1a;user-service的pom文件 第三步&#xff1a; user-service的yml文件 第四步&#xff1a;order-service的pom文件 第五步&#xff1a; order-service的yml文件 运行 访问数据 1.Nacos服务搭建 下载安装包 …