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

如何按DOCNUM批量更新数据表中TYPE列的NULL值?

批量更新NULL值为对应DOCNUM的非空TYPE值

需求说明

将表中每个DOCNUM分组下的TYPE列NULL值,替换为该组已存在的stockin或stockout非空TYPE值。


各数据库实现方法

1. MySQL/MariaDB

使用JOIN关联子查询的方式高效更新:

UPDATE your_table t1
JOIN (
    -- 提取每个DOCNUM对应的非空TYPE值
    SELECT DOCNUM, TYPE
    FROM your_table
    WHERE TYPE IS NOT NULL
    GROUP BY DOCNUM, TYPE
) t2 ON t1.DOCNUM = t2.DOCNUM
SET t1.TYPE = t2.TYPE
WHERE t1.TYPE IS NULL;

2. SQL Server

通过CTE(公共表表达式)映射DOCNUM与TYPE的对应关系后更新:

WITH DocTypeMap AS (
    SELECT DISTINCT DOCNUM, TYPE
    FROM your_table
    WHERE TYPE IS NOT NULL
)
UPDATE t1
SET t1.TYPE = dtm.TYPE
FROM your_table t1
JOIN DocTypeMap dtm ON t1.DOCNUM = dtm.DOCNUM
WHERE t1.TYPE IS NULL;

3. PostgreSQL

使用UPDATE FROM语法完成更新:

UPDATE your_table t1
SET TYPE = t2.TYPE
FROM (
    SELECT DISTINCT DOCNUM, TYPE
    FROM your_table
    WHERE TYPE IS NOT NULL
) t2
WHERE t1.DOCNUM = t2.DOCNUM
AND t1.TYPE IS NULL;

注意事项

  • 确保每个DOCNUM对应的非空TYPE值唯一,如果同一DOCNUM存在多个不同的非空TYPE(比如同时有stockin和stockout),需先处理数据冲突,否则更新结果会不确定。
  • 操作前建议先验证更新范围,避免误改:
    -- 查看即将被更新的行及目标值
    SELECT t1.*, t2.TYPE AS target_type
    FROM your_table t1
    JOIN (
        SELECT DOCNUM, TYPE
        FROM your_table
        WHERE TYPE IS NOT NULL
        GROUP BY DOCNUM, TYPE
    ) t2 ON t1.DOCNUM = t2.DOCNUM
    WHERE t1.TYPE IS NULL;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:07:14