select e.Name, m.Name as 'Manager Id'
FROM Employee e
left outer join Employee m on e.ManagerId = m.EmployeeId
在这段代码中,我使用左外连接来获得我想要的输出。 下面的代码也显示与上面相同的输出。
select e.Name, (Select m.name from Employee m where m.EmployeeId = e.ManagerId) as 'Manager Name'
From Employee e
我想知道是否有其他可能的代码来获得这些代码的相同输出? 顺便说一句,我的表包含3列,EmployeeId,Name,ManagerId。
EmpId | Name | ManagerId
1 |Charlie | 2
2 |Mike | 3
3 |Jayr |
4 |Ivan | 3
5 |Franz | 3
6 |Alexis | 2
managerID也是EmpID。就像查理一样,查理的经理是迈克,因为它的empID是2,查理的管理者是2,其他人也一样, 以下是上述代码的输出。
EmployeeName | ManagerName
Charlie | Mike
Mike | Jayr
Jayr | NULL
Ivan | Jayr
Franz | Jayr
Alexis | Mike
答案 0 :(得分:1)
你的第一个版本,左外连接,简洁明了。可能有更多的方法来编写这个查询,使用CTE,子查询,联合,我不知道是什么,但是对于我的钱他们所做的一切都是关于poinltess复杂性的。
答案 1 :(得分:0)
递归CTE的示例。 more info about CTE
;WITH cte AS
(
SELECT EmpId, Name, ManagerId, CAST(ManagerId AS nvarchar(10)) AS ManagerName
FROM dbo.Employee
WHERE ManagerId IS NULL
UNION ALL
SELECT e.EmpId, e.Name, e.ManagerId, c.Name
FROM dbo.Employee e JOIN cte c ON e.ManagerId = c.EmpId
)
SELECT Name, ManagerName
FROM cte
ORDER BY EmpId
SQLFiddle上的演示