2017-04-03 62 views
1

我试图建立在MS SQL Server的同一台通过嵌套查询层次2014 为了给什么,我想实现一个例子:SQL:建筑层次和嵌套查询在同一个表

我有一个表,“雇员”蒙山以下几列:

[ID],[First Name],[Last Name],[ReportsTo] 

{1},{John},{Doe},{2} 

{2},{Mary},{Miller},{NULL} 

我想建立一个声明,我在那里参加与本身的员工表,并在那里我建立在上面老板的层次。

预期结果:

[Employee],[Boss] 

{Miller,Mary},{NULL} 

{Doe, John},{Miller,Mary} 

我道歉,如果这是一个愚蠢的问题,但我无法创建工作嵌套查询。

你能帮我解决吗?

非常感谢你提前

+0

层次结构可以有多少层次?也就是说,老板自己能有老板吗? –

+0

三个层次应该足够了。感谢您的快速回答 – STFE

+0

您所展示的所需结果集仅显示每位员工及其直属经理。你需要比这更复杂的东西吗? –

回答

0

基于预期的结果,它看起来像你想基本上是员工的列表。因此,让我们开始是:

SELECT LastName, FirstName, ReportsTo FROM Employees 

这给你一个列表,所以你现在有你要找的对象。但是你需要填写更多的数据。您想要遵循ReportsTo并显示该记录的数据。这将完全按照外键指向不同表的方式完成。 (被同一个表中唯一的区别是,你必须在查询中使用表的别名,因为你包括两次在同一个表。)

因此,让我们加入表开始:

SELECT e.LastName, e.FirstName, e.ReportsTo 
FROM Employees e 
    LEFT OUTER JOIN Employees b on e.ReportsTo = b.ID 

结果应该是一样的,但是现在你有更多的数据可供选择。所以,你可以添加新的列到SELECT条款:

SELECT 
    e.LastName AS EmployeeLastName, 
    e.FirstName AS EmployeeFirstName, 
    b.LastName AS BossLastName, 
    b.FirstName AS BossFirstName 
FROM Employees e 
    LEFT OUTER JOIN Employees b on e.ReportsTo = b.ID 

这是一个加盟像任何其他,这恰好是一个连接到同一个表。

+0

非常感谢!这已经回答了我的问题 – STFE