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

MySQL中匹配相同tag_num时填充空列实现列值统一的SQL方案

解决MySQL中同一tag_num下字段空值填充问题

需求说明

当多条记录的tag_num(ID)相同时,需使各列值保持一致:同一tag_num分组内,若某行的description或category字段为空,需用同组内非空的对应字段值填充。

处理前数据

--------------------------------------
| tag_num |  description  | category |
--------------------------------------
|    1    | Description A |     A    |
|    1    |               |          |
|    2    | Description B |     B    |
|    2    | Description B |     B    |
|    2    | Description B |          |
|    3    | Description C |          |
|    3    |               |          |
--------------------------------------

预期输出

--------------------------------------
| tag_num |  description  | category |
--------------------------------------
|    1    | Description A |     A    |
|    1    | Description A |     A    |
|    2    | Description B |     B    |
|    2    | Description B |     B    |
|    2    | Description B |     B    |
|    3    | Description C |          |
|    3    | Description C |          |
--------------------------------------

解决方案

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

使用窗口函数MAX() OVER (PARTITION BY tag_num)自动忽略NULL值,获取每个tag_num分组内的有效字段值:

SELECT 
    tag_num,
    MAX(description) OVER (PARTITION BY tag_num) AS description,
    MAX(category) OVER (PARTITION BY tag_num) AS category
FROM your_table;

方案2:直接更新原表中的空值

通过分组子查询获取每个tag_num的有效字段值,再关联原表完成更新:

UPDATE your_table t1
JOIN (
    SELECT 
        tag_num,
        MAX(description) AS desc_val,
        MAX(category) AS cat_val
    FROM your_table
    GROUP BY tag_num
) t2 ON t1.tag_num = t2.tag_num
SET 
    t1.description = COALESCE(t1.description, t2.desc_val),
    t1.category = COALESCE(t1.category, t2.cat_val);

代码说明

  • 子查询按tag_num分组,用MAX()函数提取每个分组内非空的字段值(MAX会自动跳过NULL,保留有效内容)
  • COALESCE()函数用于判断:原字段不为空则保留原值,为空则用分组后的有效值替换

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 22:42:41