SQL自连接SQL查询

时间:2018-12-18 05:26:21

标签: sql

我正在尝试通过自我加入解决以下问题

我有这样的桌子:

Employee Name          ReportTo
--------------------------------
Bob                      Peter
Chris                    Tim
ABC                      DEF
Peter                    Null
EFG                      Peter

一个人下有很多员工,从上到下都有等级。从董事到雇用。我正在尝试创建报告以获取向他报告的所有员工。是在这里进行自我加入工作,还是有其他简便方法。我还有另一个条件,只有高层人员可以看到较低层。

预先感谢

1 个答案:

答案 0 :(得分:0)

是的,可以使用self-join

with Employees ( EmployeeName, ReportTo ) as
(
select 'Bob','Peter' union all
select 'Chris','Tim' union all
select 'ABC','DEF' union all
select 'Peter',Null union all
select 'EFG','Peter'
)
select e1.ReportTo, e1.EmployeeName
  from Employees e1
  left join Employees e2 on e2.EmployeeName =e1.ReportTo
 where e1.ReportTo is not null
 order by e1.ReportTo;

ReportTo    EmployeeName
---------   ------------
DEF         ABC
Peter       EFG
Peter       Bob
Tim         Chris