表连接查询之两个left join与递归SQL

 一、如下SQL1

 SELECT i.*,su1.name as createName,su2.name as updateNameFROM information ileft join sys_user su1 on su1.id=i.create_idleft join sys_user su2 on su2.id=i.update_id

 二、分析

 1、SELECT i.*,su.name as createName,sua.name as updateName:

这部分选择了information表的所有列(i.*),以及两个左连接的结果中的name字段。

 2、left join sys_user su1 on su1.id=i.create_id:

这是一个左连接,它会将information表中的每一行与sys_user表中id等于information表中create_id的行匹配。如果create_id在information表中没有对应的值(即没有创建用户),那么这个字段的值就是NULL,这就是左连接,不会丢弃那些没有匹配的数据。

3、left join sys_user su2 on su2.id=i.update_id:

同样,这又做了一个左连接,将information表中的每一行与sys_user表中id等于information表中update_id的行匹配,用于获取修改用户的姓名。

三、如下SQL2

WITH RECURSIVE ParentHierarchy AS (SELECT id, user_id, parent_idFROM eWHERE user_id = #{userId}UNION ALLSELECT e.id, e.user_id, e.parent_idFROM  eINNER JOIN ParentHierarchy ph 
ON e.id = ph.parent_id)SELECT *FROM ParentHierarchyWHERE parent_id = 0;

1、WITH RECURSIVE ParentHierarchy AS (...):这部分定义了一个递归的公用表表达式(CTE),名为ParentHierarchy 。

2、SELECT id, user_id, parent_id FROM e WHERE user_id = #{userId}:这是递归的初始查询部分,即递归的基准条件,它从表e中选择那些user_id字段等于指定userId的记录,这些记录就是层级结构的起始点。

3、UNION ALL:这个关键字用来将初始查询的结果和后续递归查询的结果合并在一起。(与union1不同,可能有重复记录)

4、SELECT e.id, e.user_id, e.parent_id FROM e INNER JOIN ParentHierarchy ph ON e.id = ph.parent_id:这是递归的主体部分,它将表e与已经构建的ParentHierarchy进行内连接,匹配e表中的id和ParentHierarchy中的parent_id,从而得到下一级的层级数据。

5、SELECT * FROM ParentHierarchy WHERE parent_id = 0:这是最终的查询语句,它从递归构建的层级结构中选出所有parent_id为0的记录。这里的0通常用作顶级父级的标志,意味着选出的是最顶层的记录。

举例说明:表e

1、第一步

user_id=15

初始PH (6,3,15)

e表

inner join 它会返回两个表中字段匹配的行  ph.parent_id=e.id

结果集

(1,0,10)

2、第二步

选出所有parent_id为0的记录

结果

(1,0,10)

四、思考

什么时候此递归会返回null值?

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

负载均衡 Ribbon 与 Fegin 远程调用原理

文章目录 一、什么是负载均衡二、Ribbon 负载均衡2.1 Ribbon 使用2.2 Ribbon 实现原理 (★)2.3 Ribbon 负载均衡算法 三、Feign 远程调用3.1 Feign 简述3.2 Feign 的集成3.3 Feign 实现原理 (★) 一、什么是负载均衡 《服务治理:Nacos 注册中心》 末尾提到了负载均…

污点、容忍、不可调度、排水、数据卷

目录 污点taint 污点的格式 1. key:effect 键名:污点类型 2. keyvalue:effect 键名数值:污点类型 污点的类型 1. NoSchedule 2. PreferNoSchedule 3. NoExecute(驱逐) 设置污点(主节点操作&#xff09…

[论文笔记]大模型微调数据配比策略

大模型微调数据配比策略 How Abilities in Large Language Models are Affected by Supervised Fine-tuning Data Composition https://arxiv.org/pdf/2310.05492 一、背景: 大模型是无监督的多任务学习器,其强大的泛化能力可以同时理解并执行多种任务…

PointNet++改进策略 :模块改进 | PAConv,位置自适应卷积提升精度

题目:PAConv: Position Adaptive Convolution with Dynamic Kernel Assembling on Point Clouds来源:CVPR2021机构:香港大学论文:https://arxiv.org/abs/2103.14635代码:https://github.com/CVMI-Lab/PAConv 前言 PA…

elasticsearch文档Delete By Query API(一)

这里的查询需要使用和Search API(后文会讲)相同的方式来将查询条件作为query的值传递,当然也可以使用q关键字,例如如下请求: curl -X POST “localhost:9200/twitter/_delete_by_query?pretty&quser:kimchy” -H…

HTTP 二、进阶

四、安全 1、TLS是什么 (1)为什么要有HTTPS ​ 简单的回答是“因为 HTTP 不安全”。由于 HTTP 天生“明文”的特点,整个传输过程完全透明,任何人都能够在链路中截获、修改或者伪造请求 / 响应报文,数据不具有可…

log4j 清除MDC上下文 MDC分类日志

在项目里需要分类收集处理日志信息,使用 log4j的MDC在线程中添加分类信息。不过最近却出现日志信息记录错误的情况,具体来说,就是会出现本来是属于下一个分类的一部分信息莫名的记录到上一个分类的日志文件中了。这很显然是MDC信息错误造成的…

【2024 CCF编程能力等级认证(GESP)Python 】一级大纲

目录 1. 背景2. 考核知识块3. 考核内容3.1 计算机基础知识3.2 编程规范3.3 基础语法3.4 数据类型3.5 三大基本结构3.6 运算符3.7 模块导入与输入输出3.8 Turtle绘图4. 考核目标5. 题型分布6. 考试时长7. 认证时间与报名8. 政策与福利9. GESP一级认证形式 1. 背景 官网&#xff…

[UVM]3.核心基类 uvm_object 域的自动化 copy() compare() print() pack unpack

1.核心基类:uvm_object (1)虚类只能声明,不能例化。 (2)uvm_object提供的方法 2.域的自动化(field automation) (1)简述 (2)示例 格…

php、Java、python酒店预约与送餐系统 酒店管理系统 酒店预订入住系统(源码、调试、LW、开题、PPT)

💕💕作者:计算机源码社 💕💕个人简介:本人 八年开发经验,擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等,大家有这一块的问题可以一起交流&…

C++系统教程001

1. 安装 Dev-C编程软件 2. 熟悉 Dev-C的界面 3. cout 输出语句的使用 4. 学会 C程序的编译运 一、认识编译器 我们平时所说的程序,一般指双击后就可以直接运行的程序,这样的程序又称为可执行程序。Windows系统下,可执行程序的后缀一般为.ex…

The Llama 3 Herd of Models【论文原文下载】

关注B站可以观看更多实战教学视频:hallo128的个人空间 The Llama 3 Herd of Models【论文原文】 点击下载:原文下载链接 摘要 现代人工智能(AI)系统由基础模型驱动。本文介绍了一组新的基础模型,称为 Llama 3。它是…

PostgreSQL的repmgr工具介绍

PostgreSQL的repmgr工具介绍 repmgr(Replication Manager)是一个专为 PostgreSQL 设计的开源工具,用于管理和监控 PostgreSQL 的流复制及实现高可用性。它提供了一组工具和实用程序,简化了 PostgreSQL 复制集群的配置、维护和故障…

欺诈文本分类检测(十):QLora量化微调

1. 引言 前文微调方法概览总结了微调的各种方法,并且在更前面两篇文章Lora单卡训练 和 lora单卡二次调优中已经尝试过用Lora进行微调,本文出于好奇准备尝试下用QLora进行微调的效果。 QLoRA是一种新的微调大型语言模型(LLM)的方…

使用Python的Elasticsearch客户端 elasticsearch-py 来完成删除现有索引、重新创建索引并测试分词的示例代码

以下是一个使用Python的Elasticsearch客户端 elasticsearch-py 来完成删除现有索引、重新创建索引并测试分词的示例代码 一、安装依赖 pip install elasticsearch二、运行效果 三、程序代码 from elasticsearch import Elasticsearch, NotFoundError# 连接到Elasticsearch es…

PS系统教程32

调色之单通道调色 上次分享内容调色可通过 色阶调色曲线调色 案例-复古 CtrlM调出曲线图选择单色通道-蓝色降到1/2绿色降1/4红色定点上拉 冷风 Alt复位降到1/2绿色降1/4红色定点下拉 调色-色相饱和度(ctrlu) 原图 只改变背景不改变蜥蜴的颜色 对比…

SpringBoot中@SchedulerLock注解实现定时任务中分布式锁的使用

背景 在SpringBoot项目中经常会去写一些定时任务,但是当我们的服务的实例部署多个的情况下,那么每个实例中的定时任务都会执行一遍,这显然不是我们想要的,我们只想让它执行一次。在没有引入像xxl-job之类的分布式任务调度框架的前…

CRIO与Windows下LabVIEW开发对比

LabVIEW在CRIO和Windows平台上开发时,尽管同属于一个编程环境,但在硬件架构、实时性能、模块化设计等方面存在显著差异。CRIO系统通常应用于工业自动化和嵌入式控制,具有实时操作系统支持和强大的I/O扩展能力;而Windows系统则更适…

突破教材,简单聊聊《文件系统》

文章目录 前言:文件系统的引入:认识物理磁盘: 对磁盘的存储进行逻辑抽象:LBA逻辑区块地址: 🚀文件系统的理解:理解各个区段:🛹深入理解 inode:inode和文件名&…

动态化-鸿蒙跨端方案介绍

一、背景 👉 华为在2023.9.25官方发布会上宣布,新的鸿蒙系统将不再兼容安卓应用,这意味着,包括京东金融APP在内的所有安卓应用,在新的鸿蒙系统上将无法运行,需要重新开发专门适用于新鸿蒙系统的专版APP。 …