You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MySQL递归BOM查询问题:无法获取子组件的多层级子记录

MySQL递归BOM查询问题:无法获取子组件的多层级子记录

看起来你遇到的核心问题是递归CTE的关联条件搞反了,导致只查到了顶层物料的直接子组件,没能继续向下遍历子组件的下级子件。

你的原递归查询里,关联条件写的是b.material=c.component,这相当于在找以当前递归层级的父物料为子组件的记录,方向完全错了!我们需要的是用当前层级的子组件(也就是b.component)作为下一层的父物料(对应c.material),这样才能顺着BOM的层级结构往下递归遍历。

这里给你修正后的查询代码:

WITH RECURSIVE boms AS (
    -- 锚点查询:获取顶层物料的直接子组件
    SELECT material, component, quantity
    FROM iasbomitem
    WHERE material = 'blue_ref' AND alternum = '00'
    
    UNION ALL
    
    -- 递归查询:用当前层级的子组件作为父物料,获取它的子组件
    SELECT c.material, c.component, c.quantity
    FROM boms b 
    JOIN iasbomitem c ON b.component = c.material
)
SELECT * FROM boms;

修正后的查询里,递归部分的JOIN条件改成了b.component = c.material,意思是“找到以当前层级的子组件(b.component)为父物料的所有子件”,这样就能逐层遍历整个BOM结构——包括LONGSHORT这些子组件的下级子件,直到没有更深层级的记录为止。

备注:内容来源于stack exchange,提问作者Fatih Cetinbas

火山引擎 最新活动