如何获得与递归查询第二父在公共表
问题描述:
我使用SQL Server 2008中我有一个表是这样的:如何获得与递归查询第二父在公共表
UnitId ParentId UnitName
---------------------------
1 0 FirstUnit
2 1 SecondUnit One
3 1 SecondUnit Two
4 3 B
5 2 C
6 4 D
7 6 E
8 5 F
我想记录的第二父母。例如:
如果我选择等于8的单位ID,它会使单位ID等于2给我。它需要成为SecondUnit One。或者如果我选择等于7的单位ID,它会将单位ID等于3给我。它需要成为SecondUnit Two。
如何以这种方式编写SQL查询?
答
我花了一段时间,但在这里它是:)
with tmp as (
select unitId, parentId, unitName, 0 as iteration
from t
where unitId = 7
union all
select parent.unitId, parent.parentId, parent.unitName, child.iteration + 1
from tmp child
join t parent on child.parentId = parent.unitId
where parent.parentId != 0
)
select top 1 unitId, parentId, unitName from tmp
order by iteration desc
这里也是一个fiddle一起玩。
答
SELECT t.*, tParent1.UnitId [FirstParent], tParent2.UnitId [SecondParent]
FROM Table t
LEFT JOIN Table tParent1 ON t.ParentId = tParent1.UnitId
LEFT JOIN Table tParent2 ON tParent1.ParentId = tParent2.UnitId
WHERE t.UnitId = <Unit ID search here>
AND NOT tParent2.UnitId IS NULL
编辑:如果你想要返回结果,即使他们没有第二个父节点,也省去WHERE子句的第二部分。
非常感谢。有用。优秀的解决方 – sinanakyazici 2012-04-13 07:38:59