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

递归CTE生成临时表后通过外键ID获取父级PARAM_VALUE赋值给子级的实现问题

解决方案

你当前的查询仅筛选出了所有被作为父级引用的行,没有完成子行与父行PARAM_VALUE的关联赋值,可根据你的层级关联需求选择对应实现方式:

单层父子关联(仅子级继承直接父级参数)

查询获取结果

SELECT 
    child.ID,
    child.BRIEF,
    child.REFERENCE,
    -- 逻辑可调整:子行自身有值则保留,无值则取父级值
    COALESCE(child.PARAM_VALUE, parent.PARAM_VALUE) AS PARAM_VALUE
FROM @BOQ_TABLE child
LEFT JOIN @BOQ_TABLE parent 
    ON child.BOQ_ITEM_FK = parent.ID

更新临时表原有字段

如果需要直接修改临时表中的PARAM_VALUE值,执行以下语句:

UPDATE child
SET child.PARAM_VALUE = parent.PARAM_VALUE
FROM @BOQ_TABLE child
INNER JOIN @BOQ_TABLE parent 
    ON child.BOQ_ITEM_FK = parent.ID
-- 可加筛选条件仅更新子级本身无值的行:WHERE child.PARAM_VALUE IS NULL

多层级递归关联(孙级及以下节点可继承所有上级参数)

如果你的节点存在多层嵌套,需要递归传递PARAM_VALUE,可在递归CTE中完成值的继承:

WITH RecursiveBOQ AS (
    -- 锚点:匹配根节点,判断条件可根据你的实际规则调整(如BOQ_ITEM_FK = 0)
    SELECT 
        ID,
        BRIEF,
        REFERENCE,
        PARAM_VALUE,
        BOQ_ITEM_FK,
        PARAM_VALUE AS INHERITED_PARAM_VALUE
    FROM @BOQ_TABLE
    WHERE BOQ_ITEM_FK IS NULL

    UNION ALL

    -- 递归关联上级,继承上级参数值
    SELECT 
        c.ID,
        c.BRIEF,
        c.REFERENCE,
        c.PARAM_VALUE,
        c.BOQ_ITEM_FK,
        COALESCE(c.PARAM_VALUE, p.INHERITED_PARAM_VALUE) AS INHERITED_PARAM_VALUE
    FROM @BOQ_TABLE c
    INNER JOIN RecursiveBOQ p ON c.BOQ_ITEM_FK = p.ID
)
SELECT ID, BRIEF, REFERENCE, INHERITED_PARAM_VALUE AS PARAM_VALUE
FROM RecursiveBOQ

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 00:06:00