是否有任何可能的答案来获得这些代码的相同输出

时间:2013-01-22 14:25:06

标签: sql-server-2008

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

2 个答案:

答案 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上的演示