我的嵌套子查询和 substr 函数有啥问题

Posted

技术标签:

【中文标题】我的嵌套子查询和 substr 函数有啥问题【英文标题】:what is wrong with my nested subquery and substr function我的嵌套子查询和 substr 函数有什么问题 【发布时间】:2019-10-13 17:26:45 【问题描述】:

我正在学习sql,有一个我自己解决不了的问题:

为不工作的员工选择姓名、工作、城市 与他们的直接主管相同的服务。

我有两张桌子:

EMP(NOEMP、姓名、名字、姓名、EMPLOI、SUP、HIRING、SAL、COMM、NOSERV) SERV(NOSERV 服务城市)

在分析这两个表后,我可以通过提取 SUP 列的第二个数字来知道员工是否与其主管不在同一个城市工作。

你可以在这里阅读我的建议来解决这个问题。

select e1.nom, e1.prenom, e1.emploi, s1.ville, substr(sup,2,1), e1.noserv`
from emp e1 join
     serv s1
     on e1.noserv = s1.noserv
where e1.nom  in (select distinct e3.nom
                   from emp e3 join
                        emp e4
                        on e3.noserv = e4.noserv
                   where substr(e3.sup,2,1) != e4.noserv
                  );

一切正常,但我有一个意外的输出,正如您在我的笔记本电脑的屏幕上看到的那样。

output of the query


这里是数据样本:

serv table emp table

【问题讨论】:

样本数据和所需的结果会有所帮助。 如何找到员工的主管??是否如fordon的回答中所述? 好的。如果我们从 SUP 中找到第二个数字,那么我们怎么知道他们不在同一个城市?会是什么条件? 戈登先生的回答逻辑很好,但我面临同样的问题,我有一个意外的输出(杜邦雅克),我还需要服务表中的城市,所以我需要使用服务表 【参考方案1】:

这个答案做了以下假设:

sup 是主管的empno noserv 代表“服务”

第二个假设意味着您不需要serv 表。使用joinnoserv 上的不等式就足够了:

select e.*
from emp e join
     emp m
     on m.sup = e.empno and m.noserv <> e.noserv;

【讨论】:

你好,noserv 是服务号

以上是关于我的嵌套子查询和 substr 函数有啥问题的主要内容,如果未能解决你的问题,请参考以下文章

SQL嵌套子查询和相关子查询的执行过程有啥区别

SQL嵌套子查询和相关子查询的执行过程有啥区别

在Vue中重新加载或刷新页面时如何显示正确的嵌套子选项卡

子查询(嵌套子查询)

::slotted CSS 选择器用于 shadowDOM 插槽中的嵌套子级

SQL相关子查询和嵌套子查询的区别