自我加入和迭代SQL

时间:2010-08-04 01:46:54

标签: sql sql-server

样本表

Emp Id Emp Name Manager Id
1001   arun     1004
1002   Bharath  1004
1003   Chitra   1004
1004   Devi     1005
1005   Eli      1006
1006   Fatima   1007
1007   Ganesh   1008

当我选择经理ID 1004时,它应该显示三个名称arun,bharath,chitra,如果我选择1005,它应该显示devi,arun,bharath,chitra

仅供参考 - ManagerId与EMPId相同。

如何在不使用函数的情况下准备sql?

1 个答案:

答案 0 :(得分:2)

如果您使用的是SQL Server 2005及更高版本,则可以使用公用表表达式。在这个例子中,我假设ManagerId为null表示最顶层的经理。

With HumanResources As
    (
    Select EmpId, EmpName, ManagerId, EmpName As ManagerName
    From Employees
    Where ManagerId Is Null 
    Union All
    Select E.EmpId, E.EmpName, E.ManagerId, H.EmpName
    From Employees As E
        Join HumanResources As H
            On H.EmpId= E.ManagerId
    )
Select EmpId, EmpName, ManagerId, ManagerName
From HumanResources

有关详情,请参阅Recursive Queries