我正在使用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查询?
答案 0 :(得分:6)
我花了一段时间,但现在是:)
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。
答案 1 :(得分:1)
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子句的第二部分。