无需加入即可获得员工及其经理详细信息

时间:2016-05-03 02:20:06

标签: sql performance

我有一个表员工,其中包含员工ID 经理ID
我想获得员工ID ,员工的经理ID 和员工经理的经理ID

我可以使用自联接和其他联接(例如

)来获取它
class User {
    private String name;
    private String school;
    private String sex;
    //other attributes
}

但是有更好的方法吗?我们可以在没有连接的情况下执行此操作,只需查询一次表吗?

2 个答案:

答案 0 :(得分:1)

您可以使用递归CTE,但仍然必须使用连接

看看这个例子:

WITH MyCTE
AS (
    SELECT EmpID, FirstName, LastName, ManagerID
    FROM Employee
    WHERE ManagerID IS NULL
    UNION ALL
    SELECT EmpID, FirstName, LastName, ManagerID
    FROM Employee
      INNER JOIN MyCTE ON Employee.ManagerID = MyCTE.EmpID
    WHERE Employee.ManagerID IS NOT NULL
   )
SELECT *
FROM MyCTE

请参阅此链接,了解Pinal Dave的CTE详情

http://blog.sqlauthority.com/2012/04/24/sql-server-introduction-to-hierarchical-query-using-a-recursive-cte-a-primer/

答案 1 :(得分:0)

如果您不将共同相关的子查询视为联接,则可以执行以下操作:

Select e.employee_id, 
       e.manager_id, 
       (select manager_id  
        from employee e2
        where e2.employee_id = e.manager_id) as employee_manager_id
from employee e;

但是在某些时候你做某种"加入"。