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  -- 初始层级为0FROM tbWHERE pid = 0-- 递归部分:联接递归表达式自身以获取下一级行政区域UNION ALLSELECT tb.id, tb.pid, tb.name,location_cte.level + 1  -- 层级加1FROM tbJOIN 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排序

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

团结引擎已全面支持 OpenHarmony 操作系统

Unity 中国宣布与开放原子开源基金会达成平台级战略合作。 据称团结引擎已全面支持 OpenHarmony 操作系统&#xff0c;同时将为 OpenHarmony 生态快速带来更多高品质游戏与实时 3D 内容。Unity 称现在用户可以 “在 OpenHarmony 框架中感受到与安卓和 iOS 同样丝滑的游戏体验”…

python——第九天

今日目标&#xff1a; 偏函数 递归 字符串对象 切片 常见排序和查找 偏函数&#xff1a; python中存在一种函数的特殊使用&#xff0c;称为偏函数 如果在调用某个函数时&#xff0c;恰好某一个或者&#xff0c;某一些参数都是一个固定值&#xff08;正好不是默认值&#xff09;…

若依框架数据源切换为pg库

一 切换数据源 在ruoyi-admin项目里引入pg数据库驱动 <dependency><groupId>org.postgresql</groupId><artifactId>postgresql</artifactId><version>42.2.18</version> </dependency>修改配置文件里的数据源为pg spring:d…

OpenAI暂停ChatGPT Plus新用户注册;迷宫与图神经网络

&#x1f989; AI新闻 &#x1f680; OpenAI暂停ChatGPT Plus新用户注册&#xff0c;考虑用户体验 摘要&#xff1a;OpenAI决定暂停ChatGPT Plus新用户注册&#xff0c;以应对开发日后使用量激增带来的压力&#xff0c;确保每个人都能享受良好的体验。根据调查机构Writerbudd…

LeetCode(28)盛最多水的容器【双指针】【中等】

目录 1.题目2.答案3.提交结果截图 链接&#xff1a; 盛最多水的容器 1.题目 给定一个长度为 n 的整数数组 height 。有 n 条垂线&#xff0c;第 i 条线的两个端点是 (i, 0) 和 (i, height[i]) 。 找出其中的两条线&#xff0c;使得它们与 x 轴共同构成的容器可以容纳最多的水…

rabbitmq默认交换机锁绑定的routingkey-待研究

例如这个是我的一个消息队列&#xff0c;它默认绑定的交换机是 什么类型呢? 看到这个图&#xff0c;感觉应该是一个默认的交换机&#xff0c;因为是default exchange 于是来到交换机来看看其他默认的交换机&#xff1a; 这里可以看到默认的交换机是direct&#xff08;应该没…

前端性能优化之LightHouse

优质博文&#xff1a;IT-BLOG-CN 一、LightHouse环境搭建 LightHouse是一款由Google开发的开源工具&#xff0c;用于评估Web应用程序的性能和质量。可以将其看作是一个Chrome扩展程序运行&#xff0c;或从命令行运行。为LightHouse提供一个需要审查的网址&#xff0c;它将针对…

火星探测器背后的人工智能:从原理到实战的强化学习

目录 一、引言二、强化学习基础强化学习的基本概念主要算法概述Q-Learning 示例代码 环境建模与奖励设计 三、火星探测器任务分析任务需求与挑战探测器环境建模目标设定与奖励机制层层递进的关系 四、强化学习模型设计模型架构概述DQN架构核心组件&#xff1a; 状态、动作与奖励…

nodejs+vue客户管理管理系统的设计与实现-微信小程序-安卓-python-PHP-计算机毕业设计

随着时代的不断发展&#xff0c;我国科学技术水平显著提升。就企业而言&#xff0c;其需要在大环境不断变化的今天进行管理体系的革新&#xff0c; 文章在具体研究过程中从多方面入手&#xff0c;针对当前企业管理中客户管理系统应用存在的问题进行了分析&#xff0c;阐述了应如…

趣学python编程 (三、计算机基础知识)

如果不了解些计算机的基础知识上来就编程&#xff0c;往往容易“不识庐山真面目&#xff0c;只缘身在此山中”。因此对于计算机的一些基础知识&#xff0c;在开始编程前&#xff0c;需要理解和掌握。 计算机软件系统 计算机软件是控制计算机实现用户需求的计算机操作以及管理计…

工程化实战 - 前端AST(进阶)

###脚手架 *快速自动化搭建启动工具 目标: ####第一步:处理依赖 npm i path npm i chalk4.1.0 npm i fs-extra npm i inquirer8.2.2 npm i commander npm i axios npm i download-git-repo //ora easy-table figlet ####第二步:处理工程入口 ####3.加入命令交互 交互好帮手…

vue项目中使用vant轮播图组件(桌面端)

一. 内容简介 vue使用vant轮播图组件(桌面端) 二. 软件环境 2.1 Visual Studio Code 1.75.0 2.2 chrome浏览器 2.3 node v18.14.0 三.主要流程 3.1 安装环境 3.2 添加代码 3.3 结果展示 四.具体步骤 4.1 安装环境 先安装包 # Vue 3 项目&#xff0c;安装最新版 Va…