SQL查询以获得满足条件的直接父级

时间:2014-03-03 05:19:23

标签: sql sql-server stored-procedures

我有一个类别表,其中层次结构由id,parentid维护(即一个类别的ID作为另一个类别的parentid,然后它是该元素的子级)。我想以递归的方式从一个孩子上升到一个直接的父母并检查其中一个列,说FooterAdId是否为null。如果null向上并继续检查,则返回FooterAdId。我能够通过cte递归查询获得顶级父级,但是如何将条件应用于上述场景...

enter image description here

我手里拿着id 6,上面描述的结果将是101。

2 个答案:

答案 0 :(得分:0)

使用您的CTE并在ROW_NUMBER()列中添加AS RowNum列。然后,根据你做的CTE

WITH MyCte AS
   ...
SELECT TOP 1 footeradid
FROM MyCte
WHERE footeradid IS NOT NULL 
ORDER BY RowNum

答案 1 :(得分:0)

试试这个,

Declare @t table (id int,parentid int,footerid int)
insert into @t values(1,null,null),(2,null,100),(3,1,101),(4,3,null),(5,4,null),(6,5,null)

;with CTE as
(
select * from @t where id=6
union all
select a.* from @t a inner join cte b on a.id=b.parentid and b.footerid is  null

)
select * from cte