1
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。就像在 Charlie 中一样,Charlie 的经理是 Mike,因为它的 empID 是 2,charlie 的 manageriD 是 2,其他的也一样,下面是上面代码的输出。

EmployeeName | ManagerName
Charlie       |  Mike
Mike          |  Jayr
Jayr          |  NULL
Ivan          |  Jayr
Franz         |  Jayr
Alexis        |  Mike
4

2 回答 2

1

您的第一个版本,左外连接,尽可能简洁明了。可能有更多的方法来编写这个查询,使用 CTE、子查询、联合,我不知道是什么,但为了我的钱,他们所做的只是在无点复杂性上分层。

于 2013-01-22T14:37:50.583 回答
0

递归 CTE 示例。有关 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上的演示

于 2013-01-22T16:35:35.380 回答