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

如何在SQL Server中使用两张表编写递归CTE查询?

递归CTE实现层级溯源查询

场景说明

现有两张表:

  • Table1:存储初始节点ID
    ID
    4
    3079
    
  • Table2:存储节点间的关联关系(Source为父节点,Target为子节点)
    Source, Target
    5,     4
    6,     5
    3080,  3079
    3081,  3080
    

需要实现:以Table1的ID对应Table2的Target为起点,递归向上溯源所有关联的Source节点,最终输出每个初始ID对应的所有溯源节点(包含自身)。

递归CTE查询语句

WITH RecursiveCTE AS (
    -- 锚点成员:初始化,取Table1的ID作为初始节点
    SELECT 
        t1.ID AS OriginalID,
        t1.ID AS ResultColumn
    FROM Table1 t1

    UNION ALL

    -- 递归成员:向上关联,将当前节点作为Target,获取对应的Source节点
    SELECT 
        r.OriginalID,
        t2.Source AS ResultColumn
    FROM RecursiveCTE r
    JOIN Table2 t2 ON r.ResultColumn = t2.Target
)
-- 输出最终结果,按原始ID和节点值排序
SELECT 
    OriginalID AS ID,
    ResultColumn AS [Result column]
FROM RecursiveCTE
ORDER BY OriginalID, ResultColumn;

查询结果

执行上述语句后,将得到期望的输出:

ID  Result column
4   4
4   5
4   6
3079    3079
3079    3080
3079    3081

逻辑说明

  1. 锚点成员:直接从Table1获取初始ID,同时将该ID作为第一个ResultColumn,保证每个初始ID都包含自身节点。
  2. 递归成员:通过递归CTE的ResultColumn关联Table2的Target,获取对应的Source节点,继续向上溯源,直到没有关联的节点为止。
  3. 最终查询:将递归结果中的OriginalID作为ID,ResultColumn作为结果列,排序后输出完整的溯源路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 16:42:39