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

MySQL WITH AS及递归查询

MySQL WITH AS及递归查询

WITH AS

官网:WITH 是 SQL 中的一个关键字,用于创建临时表达式(也称为 Common Table Expression,CTE),它允许你在一个查询中临时定义一个表达式,然后在后续的查询中引用它。

理解:当我们使用WITH AS 他会帮我们创建一个临时的表,这个临时表只在本次SQL中生效。当我们使用这个临时表二次以上时,他的效率是会比我们原本写两个一模一样的子查询是要搞的。

语法

WITH cte_name (column_name1, column_name2, ...) AS (-- CTE 查询SELECT ...FROM ...WHERE ...
)
-- 主查询
SELECT ...
FROM cte_name
WHERE ...

实例

WITH UserNoDisable as (-- 查询出用户表中disable为0的数据select * from User where disable = 0
)
select Stu.*,UserNoDisable.Extra from Stu Join UserNoDisable on Stu.Id = UserNoDisable.Id
union all
select Tea.*,UserNoDisable.Extra from Tea Join UserNoDisable on Stu.Id = UUserNoDisableser.Id;
-- 通过临时表可以使用我们的SQL,变得更简洁,原本需要写两次子查询的可以替换为去查临时表这也大大的提供了我们的性能。

注意:临时表一次可以建多个。

WITH tab1 as(...),tab2 as(...) select ....

递归运算(WITH RECURSIVE AS)

在临时表的基础上添加RECURSIVE 来达到递归运算。

with RECURSIVE  tab1(n) as (-- 这里是初始条件select 1-- 使用递归需要加上UNION ALL 关键字union all-- 这里是递归查询 按什么样的规则输出值,每一次递归都会将前一次的查询结果做为输入,直到查询的结果集为空时,停止递归select n+1 from tab1 where n < 10
)
select * from tab1;结果
|n |
|1 | -- 1.初始条件结果
|2 | -- 2.拿初始条件的结果,按递归查询的规则执行一次
|3 | -- .... 那上一次的
|4 |
|5 |
|6 |
|7 |
|8 |
|9 |
|10| -- 查到这里后下一次查询结果为空了,则停止递归。

递归查询使用 WITH RECURSIVE 关键字结合递归公共表达式(RCTE)来实现。它的执行顺序可以分为以下几步:

  1. 初始查询
    • 首先执行递归查询的初始部分,也就是非递归的部分,这部分的结果作为递归查询的起点。
  2. 递归查询
    • 接着执行递归部分,这部分会基于初始查询的结果逐步地进行迭代。每次迭代会将前一次迭代的结果作为输入,然后应用递归规则。
  3. 递归终止条件
    • 在递归查询的过程中,必须定义一个终止条件(要不然就是死循环),当满足终止条件时,递归将停止。
  4. 合并结果
    • 将递归查询的结果与初始查询的结果进行合并,得到最终的查询结果。

总结来说,递归查询首先执行一个初始查询,然后基于初始查询的结果进行递归迭代,直到满足了设定的终止条件为止。最终,将递归查询的结果与初始查询的结果合并,得到最终的查询结果。

需要注意的是,在编写递归查询时,一定要谨慎地定义好递归规则和终止条件,以避免无限循环或者递归层级过深导致的性能问题。

相关文章:

MySQL WITH AS及递归查询

MySQL WITH AS及递归查询 WITH AS 官网&#xff1a;WITH 是 SQL 中的一个关键字&#xff0c;用于创建临时表达式&#xff08;也称为 Common Table Expression&#xff0c;CTE&#xff09;&#xff0c;它允许你在一个查询中临时定义一个表达式&#xff0c;然后在后续的查询中引…...

Harbor私有镜像仓库搭建

本文基于&#xff1a;https://zhuanlan.zhihu.com/p/143779176 1.环境准备 IP&#xff1a;192.168.10.136/24 操作系统:centos7 2.安装Docker、Docker-compose 2.1安装Docker-CE $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.re…...

线段树 区间赋值 + 区间加减 + 求区间最值

线段树好题&#xff1a;P1253 扶苏的问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 区间赋值 区间加减 求区间最大。 对于区间赋值和区间加减来说&#xff0c;需要两个懒标记&#xff0c;一个表示赋值cover&#xff0c;一个表示加减add。 区间赋值的优先级大于区间加…...

大模型之十九-对话机器人

大语言模型的最早应用是Chatbot&#xff0c;其实我最早接触语义理解在2014年&#xff0c;2014年做智能音箱的时候&#xff0c;那时也是国内第一批做智能音箱的&#xff0c;在现在看起来当时的智能音箱比较傻&#xff0c;很多问题无法回答&#xff0c;长下文效果也不好&#xff…...

『力扣刷题本』:删除排序链表中的重复元素

一、题目 给定一个已排序的链表的头 head &#xff0c; 删除所有重复的元素&#xff0c;使每个元素只出现一次 。返回 已排序的链表 。 示例 1&#xff1a; 输入&#xff1a;head [1,1,2] 输出&#xff1a;[1,2]示例 2&#xff1a; 输入&#xff1a;head [1,1,2,3,3] 输出&am…...

Android S从桌面点击图标启动APP流程 (六)

系列文章 Android S从桌面点击图标启动APP流程 (一)Android S从桌面点击图标启动APP流程 (二) Android S从桌面点击图标启动APP流程 (三) Android S从桌面点击图标启动APP流程 (四) Android S从桌面点击图标启动APP流程 (五) Android 12的源码链接&#xff1a; android 1…...

Java I/O (输入/输出)

1.流的概念 流是一种有序的数据序列&#xff0c;根据操作类型&#xff0c;可以分为输入流和输出流两种。I/O流&#xff08;输入输出&#xff09;提供了一条通道程序&#xff0c;可以使用这条通道把源中的字节序列送到目的地。 1.1 输入流&#xff1a; 程序从指向源的输入流中读…...

nodejs+vue食力派网上订餐系统-计算机毕业设计

采用当前流行的B/S模式以及3层架构的设计思想通过 技术来开发此系统的目的是建立一个配合网络环境的食力派网上订餐系统&#xff0c;这样可以有效地解决食力派网上订餐管理信息混乱的局面。 本设计旨在提高顾客就餐效率、优化餐厅管理、提高订单准确性和客户的满意度。本系统采…...

【计算机视觉】对极几何

文章目录 一、极线约束&#xff08;Epipolar Constraint&#xff09;二、相机标定过的情况三、相机没有标定过的情况四、八点算法&#xff08;eight-point algorithm&#xff09; 我的《计算机视觉》系列参考UC Berkeley的CS180课程&#xff0c;PPT可以在课程主页看到。 在上一…...

强大易于编辑的流程图组织图绘制工具draw.io Mac苹果中文版

draw.io可以绘制多种类型的图表&#xff0c;包括但不限于流程图、组织结构图、网络图、UML图、电气工程图等。draw.io提供了丰富的图形元素和编辑功能&#xff0c;使用户能够轻松地创建和编辑各种复杂的图表。同时&#xff0c;该软件还支持多种导出格式&#xff0c;方便用户在不…...

c# .net6 在线条码打印基于

条码打印基于:BarTender、ORM EF架构 UI展示&#xff1a; 主页代码&#xff1a; using NPOI.OpenXmlFormats.Spreadsheet; using ServerSide.Models; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawi…...

Hive SQL的编译过程

1.MapReduce实现基本SQL操作的原理 详细讲解SQL编译为MapReduce之前,我们先来看看MapReduce框架实现SQL基本操作的原理 1.1 Join的实现原理 select u.name, o.orderid from order o join user u on o.uid = u.uid; 在map的输出value中为不同表的数据打上tag标记,在reduce阶段…...

[架构之路-245/创业之路-76]:目标系统 - 纵向分层 - 企业信息化的呈现形态:常见企业信息化软件系统 - 企业资源管理计划ERP

目录 前言&#xff1a; 一、企业信息化的结果&#xff1a;常见企业信息化软件 1.1 企业资源管理计划 1.1.1 什么是ERP&#xff1a;企业最常用的信息管理系统 1.1.2 ERP的演进过程 1.1.3 EPR模块 1.1.4 EPR五个层级 1.1.5 企业EPR业务总体流程图 1.1.6 什么类型的企业需…...

数据库简史:多主数据库架构的由来和华为参天引擎的机遇

注&#xff1a;本文发表后&#xff0c;收到了很多后台反馈&#xff0c;其中关于大型机的早期成就不容省略。微调重发本文&#xff0c;纯属个人观点&#xff0c;错谬之处&#xff0c;仍然期待指正。 2023年10月13日&#xff0c;在北京举办的“2023金融业数据库技术大会"上&…...

C语言每日一练(二)

单链表经典算法专题 一、 单链表相关经典算法OJ题1&#xff1a;移除链表元素 解法一&#xff1a;在原链表中删除Node.nextnext的节点 typedef struct ListNode ListNode; struct ListNode* removeElements( ListNode* head, int val) {ListNode* pcur head;ListNode* pre h…...

HashJoin 在 Apache Arrow 和PostgreSQL 中的实现

文章目录 背景PostgreSQL HashJoin实现PG 执行器架构HashJoin 基本流程HashJoin 实现细节Join 类型HashJoin 的划分阶段HashJoin 的分批处理阶段JOIN 类型的状态机转换HashJoin 的投影和过滤 Arrow Acero HashJoin实现Acero 基本框架HashJoin 基本流程 总结 背景 近两个月转到…...

FL Studio21.2.0.3421最新汉化破解版中文解锁下载完整版本

音乐在人们心中的地位日益增高&#xff0c;近几年音乐选秀的节目更是层出不穷&#xff0c;喜爱音乐&#xff0c;创作音乐的朋友们也是越来越多&#xff0c;音乐的类型有很多&#xff0c;好比古典&#xff0c;流行&#xff0c;摇滚等等。对新手友好程度基本上在首位&#xff0c;…...

docker在java项目中打成tar包

docker在java项目中打成tar包 1、首先安装一个docker desktop 2、mvn install项目后&#xff0c;建立一个自己的dockerfile 这里我以我的代码举例&#xff0c;from 镜像&#xff0c;这里你也能打包好一个镜像的基础上&#xff0c;from打好的镜像&#xff0c;这里我们用openj…...

No175.精选前端面试题,享受每天的挑战和学习

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云课上架的前后端实战课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入…...

【网安AIGC专题10.19】论文6:Java漏洞自动修复+数据集 VJBench+大语言模型、APR技术+代码转换方法+LLM和DL-APR模型的挑战与机会

How Effective Are Neural Networks for Fixing Security Vulnerabilities 写在最前面摘要贡献发现 介绍背景&#xff1a;漏洞修复需求和Java漏洞修复方向动机方法贡献 数据集先前的数据集和Java漏洞Benchmark数据集扩展要求数据处理工作最终数据集 VJBenchVJBench 与 Vul4J 的…...

不会写Shader代码?用PBR Graph制作动态海水效果全流程(Unity 2022版)

不会写Shader代码&#xff1f;用PBR Graph制作动态海水效果全流程&#xff08;Unity 2022版&#xff09; 当阳光穿透虚拟海面时&#xff0c;那些闪烁的波纹和渐变的光影往往需要复杂的数学公式——但今天&#xff0c;我们完全可以在不触碰一行CG代码的情况下&#xff0c;用Sha…...

终极指南:如何将Kubernetes metrics-server日志高效导出到S3与GCS

终极指南&#xff1a;如何将Kubernetes metrics-server日志高效导出到S3与GCS 【免费下载链接】metrics-server Scalable and efficient source of container resource metrics for Kubernetes built-in autoscaling pipelines. 项目地址: https://gitcode.com/gh_mirrors/me…...

OpenClaw配置备份指南:Qwen3-32B镜像环境迁移无忧方案

OpenClaw配置备份指南&#xff1a;Qwen3-32B镜像环境迁移无忧方案 1. 为什么需要备份OpenClaw环境 上周我的主力开发机RTX4090D突然显卡故障送修&#xff0c;导致所有OpenClaw自动化流程中断。最痛苦的不是硬件问题&#xff0c;而是重新配置Qwen3-32B镜像环境时&#xff0c;发…...

leetcode 1540. K次操作转变字符串-耗时95-Can Convert String in K Moves

Problem: 1540. Can Convert String in K Moves 耗时95%&#xff0c;统计差值的余数的频次&#xff0c;相同余数满足等差数列&#xff0c;若不满足【余数 26 * ( 频次 - 1 ) < k】则返回false 最后返回true Code class Solution { public:bool canConvertString(string …...

Oracle PL/SQL避坑指南:处理超多列(2K+)数据导出到CSV的Loop循环写法

Oracle PL/SQL超宽表处理实战&#xff1a;2000列数据高效导出方案 1. 超宽表数据处理的核心挑战 在制造业质量检测、金融风控报表等场景中&#xff0c;我们经常会遇到列数超过2000的超宽表数据处理需求。这类表格通常包含大量测试指标、传感器数据或多维分析结果&#xff0c;传…...

终极AI系统提示词泄露指南:如何解密顶级AI的核心指令集 [特殊字符]

终极AI系统提示词泄露指南&#xff1a;如何解密顶级AI的核心指令集 &#x1f50d; 【免费下载链接】system_prompts_leaks 项目地址: https://gitcode.com/GitHub_Trending/sy/system_prompts_leaks 想要深入了解ChatGPT、Claude、Gemini等顶级AI助手的工作原理吗&…...

OpenClaw对话日志分析:GLM-4.7-Flash任务执行成功率提升

OpenClaw对话日志分析&#xff1a;GLM-4.7-Flash任务执行成功率提升 1. 为什么需要分析对话日志 上个月我把本地部署的OpenClaw智能体从Qwen切换到了GLM-4.7-Flash模型&#xff0c;本以为会获得更好的任务执行效果&#xff0c;结果却遇到了意想不到的问题。每天早上打开电脑&…...

如何在ComfyUI中玩转WanVideo:从零到一的视频生成魔法

如何在ComfyUI中玩转WanVideo&#xff1a;从零到一的视频生成魔法 【免费下载链接】ComfyUI-WanVideoWrapper 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-WanVideoWrapper 你是否曾经想过&#xff0c;如果能像搭积木一样轻松创作视频该有多好&#xff…...

避坑指南:ESP32 ADC测量不准?7个常见错误与校准优化方案

ESP32 ADC精度优化实战&#xff1a;从硬件设计到软件校准的完整避坑手册 当你在ESP32项目中使用ADC读取传感器数据时&#xff0c;是否遇到过这些情况&#xff1a;明明输入电压稳定&#xff0c;读数却像心电图一样上下跳动&#xff1f;同一个电路在不同开发板上测出的数值相差甚…...

3大核心突破!MAT图像修复技术全解析:从环境部署到实战应用

3大核心突破&#xff01;MAT图像修复技术全解析&#xff1a;从环境部署到实战应用 【免费下载链接】MAT MAT: Mask-Aware Transformer for Large Hole Image Inpainting 项目地址: https://gitcode.com/gh_mirrors/ma/MAT MAT&#xff08;Mask-Aware Transformer for La…...