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

Posted

技术标签:

【中文标题】获取满足条件的直接父级的 SQL 查询【英文标题】:SQL query to get immediate parent which satisfies a condition 【发布时间】:2014-03-03 05:19:22 【问题描述】:

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

这里我手里有 id 6,如上所述我想要的结果将是 101。

【问题讨论】:

具有所需输出的示例输入!会有所帮助! 请不要让你的标题全部大写。 @vijaykumar-hadalgi 使用示例数据和所需输出更新问题。 【参考方案1】:

使用您的 CTE 并在其中包含 ROW_NUMBER()AS RowNum。然后,根据您所做的 CTE

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

【讨论】:

【参考方案2】:

试试这个,

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

【讨论】:

以上是关于获取满足条件的直接父级的 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询满足两个条件的重复记录只显示2条记录的方法

根据案例条件应用联接的 SQL 查询

SQL server如何查询满足条件的前3数据

SQL语句中,查询一个结果,满足表1的A条件,满足表2的B条件,怎么写?

sql查询并新增一列,按条件排序后给这一列赋值,并满足条件按序列赋值

python连接MySQL数据库服务器使用SQL语句查询数据表中满足筛选条件的数据