SQL Server - 获取父级和祖先PK

时间:2017-03-29 19:54:22

标签: sql sql-server

我正在使用SQL Server 2012,我有一个名为[Area]的表。该表包含PK和ParentPK。 ParentPk以递归方式从相同的[Area]表引用PK。如果没有父级,则为ParentPk填写null。

Pk     ParentPk
----------------
1      null
2      null
3      1
4      3
...

我知道祖先与孩子的关系正好是3级。在上面的例子中,Pk:4的parentPk:3和grandParentPk:1。

我希望能够以以下形式进行SELECT查询:

SELECT GrandParentPk, ParentPk, ChildPk
...
...
...
where ChildPk = <childPk>

是否存在非存储过程,非递归解决方案来实现此目的?

1 个答案:

答案 0 :(得分:1)

如果您总是使用最后一个孩子pk进行查询,并且层次结构始终为三个级别,则可以使用两个inner join

select gp.pk as GrandParentPk, p.pk as ParentPk, c.pk as ChildPk
from Area c
  inner join Area p
    on c.parentPk = p.pk
  inner join Area gp 
    on p.parentPk = gp.pk
where c.pk = 4

rextester演示:http://rextester.com/MSXTVR55260

返回:

+---------------+----------+---------+
| GrandParentPk | ParentPk | ChildPk |
+---------------+----------+---------+
|             1 |        3 |       4 |
+---------------+----------+---------+