我正在使用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>
是否存在非存储过程,非递归解决方案来实现此目的?
答案 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 |
+---------------+----------+---------+