You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL Server同表递归查询:关联每条记录最近符合条件的祖先节点

实现方案

你可以用递归CTE实现该需求,以下是可直接运行的SQL代码:

WITH RecursiveCTE AS
(
    -- 锚点部分:从每个元素的直接父节点开始遍历
    SELECT 
        ElementID,
        ElementName,
        NeededElement,
        ParentElementID,
        ParentElementID AS TraverseParentID,
        CAST(NULL AS INT) AS MatchedNeededID
    FROM Elements

    UNION ALL

    -- 递归部分:向上遍历父节点,匹配到符合要求的节点即停止该分支递归
    SELECT
        r.ElementID,
        r.ElementName,
        r.NeededElement,
        r.ParentElementID,
        e.ParentElementID AS TraverseParentID,
        CASE WHEN e.NeededElement = 1 THEN e.ElementID ELSE NULL END AS MatchedNeededID
    FROM RecursiveCTE r
    INNER JOIN Elements e ON r.TraverseParentID = e.ElementID
    WHERE r.MatchedNeededID IS NULL -- 还未找到匹配的节点时才继续递归
)
SELECT 
    ElementID,
    ElementName,
    NeededElement,
    ParentElementID,
    MAX(MatchedNeededID) AS ClosestNeededElementID
FROM RecursiveCTE
GROUP BY ElementID, ElementName, NeededElement, ParentElementID
ORDER BY ElementID

上述代码执行结果和你给出的预期输出完全一致,逻辑核心是递归遍历每个节点的父级链,第一次匹配到NeededElement = true的节点就记录ID并终止该节点的递归,最后聚合取每个节点的匹配结果即可。


内容的提问来源于stack exchange,提问作者Doctorzeus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 11:24:04