首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >有人能解释一下下面的查询是如何工作的吗?

有人能解释一下下面的查询是如何工作的吗?
EN

Stack Overflow用户
提问于 2020-11-24 06:56:58
回答 1查看 58关注 0票数 1
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
IF (Object_ID('Employee1') is Not Null)
   Drop Table Employee1

Create Table Employee1(
   EID int primary key,
   Name varchar(50),
   MID int references Employee1(EID)
)

Insert into Employee1 values
   (1,'Peter',2),
   (2,'Nancy',3),
   (3,'Bob',null),
   (4,'Philip',5),
   (5,'Jason',3),
   (6,'Gilbert',5)

给我开胃菜,所有经理经理的名字

下面是我为这个问题写的查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select distinct 
   e1.eid, 
   e1.name, 
   e1.mid 
from employee1 e1
   inner join employee1 e2 on e1.eid = e2.mid
   inner join employee1 e3 on e3.mid = e2.eid

但是我找不到这个查询是如何工作的。它给了我正确的答案,但是,我怎么不知道。

有人能解释一下这个查询是如何一步一步地执行的吗?提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-11-24 07:04:16

我最初的想法是,这是上升的链子,它看起来是向下的链,经过更仔细的审查。因此,每个经理必须至少有两个级别的下属,然后才能返回该经理。如果他们没有至少两个级别;经理将不会被返回。

因此,在中间假设MID是managerID时,查询每次连接到managerID表2次。因为每个联接都是内部联接,因此只有有员工的经理和有员工的员工才会返回。这意味着只有低于2级员工的经理才会返回;而在那些只有不同员工的管理人员中,才会返回。

分解它:

第一次加入将返回所有经理和他们的员工。第二次加入将返回所有经理和他们的员工。

因此,结果将是主employee表中的所有经理的不同列表,但只有当他们有员工时,而且由于内部联接的性质,他们的员工只有在关联表中存在记录时才返回记录。

还有其他方法可以使用递归的CTE来实现这一点,而不必为您想要跟踪的每个级别使用单独的联接;从而消除了为每个所需级别添加联接的需要。

Rextester示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 With CTE AS (
   SELECT eid EID , name NAME , mid MID, 1 as Depth
   FROM EMPLOYEE1
   WHERE MID is not null
   
   UNION ALL
   --This union all is part of the recursion magic

   SELECT E1.eid,e1.name,e1.mid, Depth+1
   FROM Employee1 E1
   --This is where it gets really weird.  We're doing a join to the CTE itself from within the CTE... That's recursion.
   INNER JOIN CTE E2
    on E2.MID=E1.EID
   
   )
          SELECT Distinct * FROM CTE
          WHERE DEPTH = 3
          
          
   ;

其结果是:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
+----+-----+------+------+-------+
|    | EID | NAME | MID  | Depth |
+----+-----+------+------+-------+
|  1 |   3 | Bob  | NULL |     3 |
+----+-----+------+------+-------+
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64989062

复制
相关文章
deploy to heroku
deploy to heroku install heroku https://devcenter.heroku.com/articles/getting-started-with-java#introduction create heroku webapp plugin <dependency> <groupId>org.glassfish.jersey.archetypes</groupId> <artifactId>jersey-heroku-webapp</artifactId>
用户3004328
2018/09/06
1.2K0
本地tomcat 配置环境变量[通俗易懂]
3、配置环境变量完成后,测试配置结果 将 tomcat 解压后的 bin 目录下的 startup.bat 文件,复制到其他文件夹并双击启动
全栈程序员站长
2022/09/05
4580
heroku快速部署node应用
试了一下heroku,简直碉堡了,下面介绍如何简单几步实现弄得应用的部署访问: 1、首先https://dashboard.heroku.com/进行账号注册 2、github上push一个最新的no
用户1141560
2017/12/26
1.3K0
heroku快速部署node应用
在 Heroku 上部署 Django 应用
Heroku是一个很棒的平台,它有很多的控件,并且搭建环境相对来说也比较容易。本指南中,我将一步一步指导你在Heroku平台上部署一个简单地Django应用。
星哥玩云
2022/07/03
1.6K0
python打印环境变量
查看环境变量 import sys print sys.print 打印 echo $PYTHONPATH export:将自定义变量设定为系统环境变量(当前shell中有效) export PATH=$PATH:/…/bin
py3study
2020/01/06
2.6K0
python环境变量配置
程序和可执行文件可以在许多目录,而这些路径很可能不在操作系统提供可执行文件的搜索路径中。
用户1168904
2021/08/02
21K0
python 获取环境变量
参考 https://docs.python.org/2/library/os.html
py3study
2020/01/06
8690
Python设置环境变量
点击链接下载:python下载 你也可以无脑安装,对计算机的影响不打,不过建议别无脑 我们选择自己安装,然后选择想要安装的目录,不然我们能看见在Install Now下面有一个目录那个就是默认的安装C盘位置,当然若你觉得这样好找python也可以直接点第一个安装
全栈程序员站长
2022/11/19
2.1K0
Python设置环境变量
【Linux】Linux环境变量的理解 --- 命令行参数、shell子进程、环境变量、本地变量…
1. 我们平常所用的Linux指令其实也是可执行程序,和我们自己写的二进制程序没什么两样,那么为什么在执行自己的程序的时候需要加上./,而执行这些系统提供的指令(可执行程序),不需要加上./呢?
举杯邀明月
2023/04/12
2.1K0
【Linux】Linux环境变量的理解 --- 命令行参数、shell子进程、环境变量、本地变量…
Salesforce Heroku(一)环境搭建
Heroku是一个支持多种编程语言的云平台即服务。在2010年被Salesforce.com收购。Heroku作为最开始的云平台之一,从2007年6月起开发,当时它仅支持Ruby,但后来增加了对Java、Node.js、Scala、Clojure、Python以及(未记录在正式文件上)PHP和Perl的支持。基础操作系统是Debian,在最新的堆栈则是基于Debian的Ubuntu。
repick
2021/12/20
2.5K0
Salesforce Heroku(一)环境搭建
python中添加环境变量
import sys sys.path 系统环境是一个list,可以将自己需要的库添加进入,例如mysql库,hive库等等。有三种方式添加,均验证通过: 1 临时添加,在一个shell窗口中 import sys sys.path sys.path.append(path)  但退出该shell窗口,即失效 2 使用pth文件永久添加  使用pth文件,在 site-packages 文件中创建 .pth文件,将模块的路径写进去,一行一个路径,以下是一个示例,pth文件也可以使用注释: # .pth fi
用户1214487
2018/01/23
2.5K0
python获取linux环境变量_linux如何设置环境变量
为了演示我的意思,采用两个大致相同的程序(C中的第一个,python中的另一个):
全栈程序员站长
2022/11/10
8.4K0
Salesforce Heroku(四)Salesforce中的应用(ConnectedApp)
前边我们开发好Heroku程序,在Salesforce中要如何使用呢,下边一种方法是做成一个ConnectedApp,然后在Lightning中做迁移跳转。
repick
2021/12/24
8640
Salesforce Heroku(四)Salesforce中的应用(ConnectedApp)
Salesforce的PaaS平台Heroku简介
Heroku是可支持多种编程语言的PAAS平台。现归属于Salesforce。Heroku与2007年开始发展起来,作为最早的云平台之一,在最初的时候只只能ruby编程语言,后来宣布支持Java、Node.js、Scala、Clojure、php以及Python这种语言。
臭豆腐
2019/04/16
7.3K0
Salesforce的PaaS平台Heroku简介
python设置进程的环境变量
import os print 'setenv...', print os.environ['USER'] # show current shell variable value os.environ['USER'] = 'Brian' # runs os.putenv behind the scenes os.system('python echoenv.py') os.environ['USER'] = 'Arthur' #
用户7705674
2021/11/01
8820
Salesforce Heroku(三)环境搭建-Eclipse
如果需要上传到GitHub上,需要在自己的GitHub账户上安装第三方服务验证,下边是安装流程
repick
2021/12/23
6380
Salesforce Heroku(三)环境搭建-Eclipse
从Heroku看好雨云帮
应用开发究竟有多难?对于体验过切肤之痛的企业、创业者、开发者来说,一定是一言难尽的。从寻找合适的技术人才到搭建基础设施,从选择正确的软件管理方法到长时间枯燥而复杂的测试、发布、部署、反馈……传统的应用开发行到此时,能否成功交付仍然是未知数。 而云计算的出现则为现代应用开发带来了新思路,身在海外的企业、创业者和开发者更早享受到了技术进步所带来的便利。 随着云计算的逐渐发展和成熟,越来越多的企业、开发者得以从如硬件、服务器管理等复杂而繁琐的工作中解放出来,将注精力集中在应用本身,利用更小的代价实现应用的快速交付
Rainbond开源
2018/05/31
1.4K0
如何设置python的环境变量_anaconda环境变量手动设置
在python项目实践中,不知道为什么我的os.getenv一直拿不到环境变量,于是我就试了三种设置环境变量的方法,中解决了问题。
全栈程序员站长
2022/09/25
4.6K0
如何设置python的环境变量_anaconda环境变量手动设置
搭建python本地源
[root@tongc-yum162 ~]# wget https://files.pythonhosted.org/packages/d3/3e/1d74cdcb393b68ab9ee18d78c11ae6df8447099f55fe86ee842f9c5b166c/setuptools-40.0.0.zip
py3study
2020/01/07
1.5K0
点击加载更多

相似问题

本地和Heroku环境变量

40

问题设置本地heroku环境变量

15

Heroku Python导入本地函数

20

导出用于本地开发和heroku部署的环境变量

11

更改heroku环境变量

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文