我有一个表员工,其中包含员工ID 和经理ID 。
我想获得员工ID ,员工的经理ID 和员工经理的经理ID 。
我可以使用自联接和其他联接(例如
)来获取它class User {
private String name;
private String school;
private String sex;
//other attributes
}
但是有更好的方法吗?我们可以在没有连接的情况下执行此操作,只需查询一次表吗?
答案 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详情
答案 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;
但是在某些时候你有做某种"加入"。