表连接查询之两个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 FROM information i:

查询结果为  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的行匹配

结果集

(1,1,2,张三,李四),

(2,1,3,张三,王五),

(3,2,4,李四,小明)

三、如下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 (...):定义了一个递归的公用表 表达式,名为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的记录。

举例说明:表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.rhkb.cn/news/416992.html

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

相关文章

深度学习特征提取魔改版太强了!发文香饽饽!

要说CV领域经久不衰的研究热点,特征提取可以占一席,毕竟SLAM、三维重建等重要应用的底层都离不开它。 再加上近几年深度学习兴起,用深度学习做特征提取逐渐成了主流,比传统算法无论是性能、准确性还是效率都更胜一筹。 目前比较…

汽车制造商设备运维案例

汽车产线有很多传动设备需要长期在线运行,会出现老化、疲劳、磨损等问题,为了避免意外停机造成损失,需要加装一些健康监测设备,监测设备运行状态。天津三石峰科技采用无线温振传感器汇聚网关方案,将现场设备数据数据上…

linux~~目录结构远程登录教程(xshell+xftp)

目录 1.目录结构 2.远程登录xshell 2.1所需工具 2.2了解虚拟机IP 2.3查看是否正常连接 2.4xshell进行连接 3.文件传输xftp7 3.1xftp6安装 3.2相关设置 3.3效果展示 3.4文件之间的传输过程 1.目录结构 bin目录里面主要存放这个我们经常使用的指令,例如这个…

科研绘图系列:R语言PCoA图(PCoA plot)

介绍 PCoA(主坐标分析,Principal Coordinate Analysis)是一种多维数据的降维技术,它用于探索高维空间中样本之间的关系。PCoA通常用于生态学、遗传学和其他领域的数据分析,以揭示样本或个体之间的相似性或差异性。 PCoA图的作用: 数据降维:PCoA可以将高维数据(如物种…

RKNPU2从入门到实践 ---- 【8】借助 RKNN Toolkit lite2 在RK3588开发板上部署RKNN模型

前言 作者使用的平台为Ubuntu20.04虚拟系统,开发板为瑞芯微RK3588,开发板上的系统为Ubuntu22.04系统。 一、任务 完成RKNN模型的部署,RKNN模型的部署是将RKNN模型放到开发板上,应用程序可以加载RKNN模型,从而在嵌入式…

Markdown 语法大全详解

Markdown 语法大全详解 Markdown是一种轻量级标记语言,排版语法简洁,让人们更多地关注内容本身而非排版。它使用易读易写的纯文本格式编写文档,可与HTML混编,可导出 HTML、PDF 以及本身的 .md 格式的文件。因简洁、高效、易读、易…

Node.js模块系统

大家好呀,今天我们来认识以下Node.js的模块系统。 模块系统 目录 模块系统 node项目 创建一个完整的node项目 模块之间的引用 模块的导入 模块的分类 核心模块的引用 获取模块的导出对象 小结 node项目 一个node项目,单有JS文件是不行的&#xff…

Linux操作系统中的进程查看与进程调度

一.进程查看 什么是进程? 进程 process 计算机执行任务的最小单位,在计算机上运行一个应用软件可能会产生多个进程, 二.进程查看——ps -aux ps命令查看进程 如上图所示,是ps命令加上aux选项产生的结果,其作用是…

数字芯片中I/O单元及电源domain布局中SIPI的考虑

芯片设计的物理实施过程通常也简称为布局布线(P&R,Place-and-Route),布局一般被分为布局规划(Floorplan)和标准单元摆放(Place)两个过程。而其中的布局规划是芯片后端物理实现过…

大模型的实践应用28-基于ChatGLM大模型搭建智能自助用药问答系统、药物智能管理系统的应用详解

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用28-基于ChatGLM大模型搭建智能自助用药问答系统、药物智能管理系统的应用详解。 随着人工智能技术的发展,我们的生活在许多方面都得到了改善。本文将介绍如何利用现有的大模型(如:ChatGLM2-6b,百川,通义千问)构建一…

Golang | Leetcode Golang题解之第385题迷你语法分析器

题目: 题解: func deserialize(s string) *NestedInteger {index : 0var dfs func() *NestedIntegerdfs func() *NestedInteger {ni : &NestedInteger{}if s[index] [ {indexfor s[index] ! ] {ni.Add(*dfs())if s[index] , {index}}indexreturn…

Linux【6】系统

时间日期 date日期 cal——当月日历 cal -y 今年的日历 磁盘占用df du df 剩余空间 du 目录下的文件大小 进程ps ps aux a——其他用户 u——详细状态 x——没有控制终端 只看CPU占用高的进程top kill pid代号 ——杀死程序 通配符(简略版) …

conda create创建失败

如图一样,每次创建环境都显示连接不上,换了各种源各种方法都不行,最后把.condarc给删掉就能正常下载了,我类目了

Tekton简介,安装和构建最简单ci/cd

简介 Tekton是一种基于k8的支持CI/CD的operator。 说到持续集成,我们比较熟悉的有jenkins,gitlab ci等,但只有Tekton是云原生的。 既然Tekton是一种operator,那就必须了解它的CRD,然后我们定义CR,让Tekt…

如何使用Jmeter关联influxDB?

一、添加"添加后端监听器" 二、后端监听器实现选择,"org. apache. jmeter. visualizers. backend. influxdb.InfluxdbBackendlistenerClient" 三、修改"influxdbUrl:自己的主机、application:取一个项目名" 四、influxDB&…

AGV/AMR移动机器人产业链全景图(二),应用场景及嵌入式控制器主板案例分析

AGV/AMR移动机器人的下游应用场景 物流行业:物流行业是AGV应用最为广泛的领域之一。随着电子商务的兴起和物流业的快速发展,仓库管理、货物分拣和配送等环节的自动化需求日益增长。AGV通过自主导航和智能调度,实现了货物的快速、准确搬运&am…

数据分析-11-时间序列分析的概念任务和主要方法

1 时间序列 1.1 时间序列的定义 时间序列,通俗的字面含义为一系列历史时间的序列集合。比如2013年到2022年我国全国总人口数依次记录下来,就构成了一个序列长度为10的时间序列。 结合上图理解随机变量和观测值的关系。 我们认为每个时间点发生的数据都来自于一个分布的,…

2024国赛数学建模备赛|30种常用的算法模型之最优算法-非线性规划

1.1 非线性规划的实例与定义 如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。一般说来,解非线性规划要比解线性规划问题困难得多。而且,也不象线性规划有 单纯形法这一通用方法,非线性规划目前还没…

并发工具类(一):CountDownLatch

1、CountDownLatch介绍 CountDownLatch 又称为“倒计数门阀”,但大多数称之为“计数器”,是juc包下的一个工具类; CountDownLatch 核心功能是:用于一个活多个线程等待其他线程执行完成的一组操作。 CountDownLatch 中有个全局的计…

【Blender】快捷键_ 学习日志_01

【Blender】快捷键_ 学习日志_01 学习了blender的快捷键的使用。 2024年8月30日 视角操控 围绕中心旋转:按住鼠标中建 平移视角:Shift鼠标中键 视角前进后退:滚动滚轮 视图切换 0 切换到摄像机视图 1 切换正试图 2,4&…