SQL以递归方式遍历同一个表中的行

时间:2018-01-10 10:03:24

标签: sql sql-server-2012 hierarchical-data recursive-query

使用Microsoft SQL Server Management Studio 2012

我的表格中包含“DepartmentID”“DepartmentName”“FatherDepartmentID”

示例:我的部门名称为“Root”,ID为“25”。然后我有几个其他部门与FatherDepartmentID“25”。这意味着那些是“Root”部门的子部门。

非常困难的部分:然后可能会出现一个父部门有一个ChildDepartment的情况,而这个ChildDepartment(可以说是ID“22”)可以有另一个ChildDepartment(FatherID“22”)。

现在我的目标是我拥有第一个父系部门(根部门)的ID,然后我想要所有子部门的部门名称。并进一步递归(Childdepartments的ChildDepartments的所有名称,依此类推)。

从我的老板那里得知,它只能在一个查询中完成(而且他说可以)。

到目前为止,我设法找到所有第一级ChildDepartments,但没有一个进一步向下(递归部分)。

在下面的查询中,我有一个人的ID(68)(来自另一个表的,其中ID与根部门链接,因为它是关于某些部门拥有权限的人)和查找所有第一级ChildDepartments:

SELECT B.DepartmentDesc
FROM  CompanyDepartmentPermission A
INNER JOIN CompanyDepartment B ON A.DepartmentID=B.DepartmentID OR       
A.DepartmentID=B.FatherDepartmentID
WHERE A.PEmplID = 68

由于我对SQL查询非常陌生,所以我没有办法和想法如何解决这个问题,我做了大量的研究。如果有人能提出一个有效的解决方案,我会非常感谢解释,因为我想学习和理解:)

0 个答案:

没有答案