我的嵌套子查询和 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
表。使用join
和noserv
上的不等式就足够了:
select e.*
from emp e join
emp m
on m.sup = e.empno and m.noserv <> e.noserv;
【讨论】:
你好,noserv 是服务号以上是关于我的嵌套子查询和 substr 函数有啥问题的主要内容,如果未能解决你的问题,请参考以下文章