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

SQL Server条件父子递归查询:库存套件层级过滤需求

修改SQL Server递归查询以满足套件节点不展开后代的需求

问题分析

你需要递归查询SKU1的所有后代,但当节点的isStockedAsKit为true时,仅保留该节点本身,不查询其下的子节点。原查询未对递归过程添加该限制,导致套件节点的后代也被查询出来。

修改后的查询代码

WITH level AS 
(
    -- 初始节点:顶层物料SKU1
    SELECT 
        Parent,
        Child,
        0 AS level_number,
        isStockedAsKit
    FROM [Bundles] 
    WHERE Child = 'SKU1' 
    
    UNION ALL 
    
    -- 递归部分:仅当父节点不是套件时,才查询其子节点
    SELECT 
        child.Parent,
        child.Child,
        l.level_number + 1 AS level_number,
        child.isStockedAsKit
    FROM [Bundles] AS child 
    JOIN level AS l 
        ON l.Child = child.Parent
        AND l.isStockedAsKit = 0 -- 核心限制:父节点非套件才继续递归
) 
SELECT 
    level_number AS 'Lvl',
    Parent,
    Child,
    isStockedAsKit
FROM level

关键修改点

  • 在CTE中加入isStockedAsKit字段:无论初始查询还是递归查询,都保留该字段,用于判断是否继续递归。
  • 添加递归限制条件:在JOIN时增加l.isStockedAsKit = 0(对应布尔值false),确保只有非套件节点的子节点才会被纳入递归查询。当父节点的isStockedAsKit为true时,不会继续查询其后代。
  • 简化最终查询:直接从CTE中获取所有所需字段,避免原查询中可能存在的无效JOIN(原示例表无ID字段,推测为笔误)。

验证结果

执行上述查询后,将得到你期望的结果:套件SKU4仅显示自身,其下的SKU2、SKU5不会被查询出来,其他非套件节点的后代正常展开。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 20:57:27