SQL:在同一表上构建层次结构和嵌套查询



>我正在尝试通过在MS SQL Server 2014中的同一表上嵌套查询来构建层次结构。举个我想要实现的例子:

我有一个表格"员工",其中有以下列:

[ID],[First Name],[Last Name],[ReportsTo]
{1},{John},{Doe},{2}
{2},{Mary},{Miller},{NULL}

正在尝试构建一个声明,在其中我与自身连接员工表,并在其中构建一个层次结构,老板在顶部。

预期成果:

[Employee],[Boss]
{Miller,Mary},{NULL}
{Doe, John},{Miller,Mary}

我很抱歉,如果这是一个愚蠢的问题,但我无法创建一个有效的嵌套查询。

你能帮我吗?

提前非常感谢

根据预期的结果,看起来您本质上想要的是员工列表。 因此,让我们从此开始

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

它与其他任何联接一样,恰好是同一个表的联接。

最新更新