使用 SELF(RECURSIVE) JOIN 列出薪水低于或相等于其主管的教职员工
Posted
技术标签:
【中文标题】使用 SELF(RECURSIVE) JOIN 列出薪水低于或相等于其主管的教职员工【英文标题】:List faculty members who have smaller or equal salary than their supervisor by using SELF(RECURSIVE) JOIN 【发布时间】:2017-05-13 07:53:09 【问题描述】:下面是教师表
这是我的作业中的查询问题,如下所示:
列出薪水低于或相等于其主管的教职员工。列出教师和主管的社会安全号码、姓氏和薪水。 (提示:使用递归连接)
这就是我的方法,如下所示:
SELECT Faculty.FacSSN, Faculty.FacLastName, Faculty.FacSalary, Faculty.FacSupervisor, S.FacLastName, S.FacSalary
FROM Faculty, Faculty S
WHERE NOT Faculty.FacSSN = Faculty.FacSupervisor
AND Faculty.FacSalary <= S.FacSalary
AND NOT Faculty.FacLastName = S.FacLastName
AND Faculty.FacSupervisor IS NOT NULL;
这是我得到的以下结果,如下所示
我得到的结果是主管的薪水大于或等于教员的薪水。但问题是我也得到了教员的薪水(不是主管)大于或等于其他教员的薪水的结果。
我该如何解决这个问题?
有人可以更正我的 SQL 代码吗?
【问题讨论】:
请阅读meta.***.com/questions/285551/… 和接受的答案 我正在使用 Microsoft Access DBMS。 【参考方案1】:Access 不支持递归连接,您必须为此切换 DBMS。另见Is it possible to create a recursive query in Access?
也就是说,这个问题似乎不需要递归连接,因为只需要直接主管,而不需要整个层次结构。
查看您的查询,我不确定您使用 WHERE NOT Faculty.FacSSN = Faculty.FacSupervisor
的目的是什么(没有人是他们自己的主管),但如果您将其更改为 WHERE S.FacSSN = Faculty.FacSupervisor
,它应该可以工作。
清理后的版本如下所示:
SELECT F.FacSSN, F.FacLastName, F.FacSalary, F.FacSupervisor, S.FacLastName, S.FacSalary
FROM Faculty AS F
INNER JOIN Faculty AS S ON S.FacSSN = F.FacSupervisor
WHERE F.FacSalary <= S.FacSalary
【讨论】:
以上是关于使用 SELF(RECURSIVE) JOIN 列出薪水低于或相等于其主管的教职员工的主要内容,如果未能解决你的问题,请参考以下文章