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

如何基于ID将code3='in'的code1/code2值填充到同ID的code3='out'字段

正确SQL实现方案

方案1:查询生成填充后的结果(不修改原表)

如果只是需要查询出填充后的结果,不需要修改原表,可以用CTE(公共表表达式)提取每个id对应的code3="in"的字段值,再通过关联和COALESCE函数填充空值:

WITH in_records AS (
    SELECT 
        id,
        code1 AS in_code1,
        code2 AS in_code2
    FROM input_table
    WHERE code3 = 'in'
)
SELECT 
    t.id,
    t.code3,
    COALESCE(t.code1, ir.in_code1) AS code1,
    COALESCE(t.code2, ir.in_code2) AS code2
FROM input_table t
LEFT JOIN in_records ir ON t.id = ir.id
ORDER BY t.id, t.code3;

逻辑说明:

  • in_records 先筛选出所有code3="in"的记录,存储每个id对应的有效code1和code2值。
  • LEFT JOIN 确保原表的所有记录都被保留,不会丢失数据。
  • COALESCE 函数会优先使用原记录的code1/code2值,只有当原字段为空时,才替换为同id下code3="in"的对应值。

方案2:直接更新原表数据

如果需要直接修改原表,把空值填充完成,可以用UPDATE语句配合子查询:

UPDATE input_table t
SET 
    code1 = COALESCE(t.code1, ir.in_code1),
    code2 = COALESCE(t.code2, ir.in_code2)
FROM (
    SELECT id, code1 AS in_code1, code2 AS in_code2
    FROM input_table
    WHERE code3 = 'in'
) ir
WHERE t.id = ir.id
AND t.code3 = 'out'
AND (t.code1 IS NULL OR t.code2 IS NULL);

逻辑说明:

  • 子查询同样提取每个id的code3="in"字段值。
  • 仅针对code3="out"且code1/code2为空的记录进行更新,避免修改已有有效值的记录。
  • 用COALESCE保证只有空值才会被替换。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 10:52:02