Sql server SQL:在同一个表上构建层次结构和嵌套查询
我试图通过在MS SQL Server 2014中的同一个表上嵌套查询来构建层次结构。 举一个我正在努力实现的例子: 我有一个包含以下列的“employees”表:Sql server SQL:在同一个表上构建层次结构和嵌套查询,sql-server,nested,hierarchy,Sql Server,Nested,Hierarchy,我试图通过在MS SQL Server 2014中的同一个表上嵌套查询来构建层次结构。 举一个我正在努力实现的例子: 我有一个包含以下列的“employees”表: [ID],[First Name],[Last Name],[ReportsTo] {1},{John},{Doe},{2} {2},{Mary},{Miller},{NULL} 我试图构建一个语句,在这里我将自己加入到employees表中,在这里我构建了一个层次结构,老板在上面 预期结果: [Employee],[Boss
[ID],[First Name],[Last Name],[ReportsTo]
{1},{John},{Doe},{2}
{2},{Mary},{Miller},{NULL}
我试图构建一个语句,在这里我将自己加入到employees表中,在这里我构建了一个层次结构,老板在上面
预期结果:
[Employee],[Boss]
{Miller,Mary},{NULL}
{Doe, John},{Miller,Mary}
如果这是一个愚蠢的问题,我很抱歉,但是我无法创建一个有效的嵌套查询
你能帮我一下吗
提前非常感谢根据预期结果,您基本上想要的似乎是一份员工名单。让我们从这个开始:
SELECT LastName, FirstName, ReportsTo FROM Employees
这将为您提供一个列表,这样您就拥有了要查找的对象。但你需要填写更多的数据。您希望按照reports to
操作,并显示该记录指向的数据。这将完全按照外键指向另一个表的方式进行。(与同一个表的唯一区别是必须在查询中使用表别名,因为要包含同一个表两次。)
让我们从加入表格开始:
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
它和其他任何表一样是一个联接,只是碰巧是同一个表的联接。层次结构可以有多深?也就是说,一个老板自己能有一个老板吗?三个层次就足够了。感谢您的快速回答。您所显示的期望结果集仅显示每位员工及其直属经理。你需要比这更复杂的东西吗?