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

MySQL如何根据AccountId列替换Id列的NULL值?

解决方案:填充同一AccountId下的NULL Id值

核心思路是先获取每个AccountId分组对应的非NULL Id值,再将该组内的NULL Id替换为这个值。以下是不同数据库环境下的可行写法:

支持窗口函数的数据库(MySQL 8.0+、SQL Server、PostgreSQL等)

使用窗口函数MAX() OVER (PARTITION BY AccountId)直接获取当前AccountId组的非NULL Id,再通过COALESCE替换NULL:

SELECT 
    COALESCE(Id, MAX(Id) OVER (PARTITION BY AccountId)) AS Id,
    AccountId
FROM your_table_name;

这里MAX(Id)能准确拿到组内的非NULL Id,因为每个AccountId组只有一个非NULL值,用MIN(Id)效果一样。

旧版本MySQL(不支持窗口函数)

用子查询先分组提取每个AccountId对应的非NULL Id,再关联原表进行替换:

SELECT 
    COALESCE(t1.Id, t2.group_id) AS Id,
    t1.AccountId
FROM your_table_name t1
JOIN (
    SELECT AccountId, MAX(Id) AS group_id
    FROM your_table_name
    GROUP BY AccountId
) t2 ON t1.AccountId = t2.AccountId;

为什么之前的IF()/COALESCE()没生效?

你之前应该是直接写了COALESCE(Id, AccountId),没有关联到同组的非NULL Id值,所以才会把NULL替换成AccountId。上面的写法是先拿到对应分组的正确Id,再做替换。

执行后得到的目标结果:

IdAccountId
201a-123
201a-123
201a-123
202a-234
203a-345

内容的提问来源于stack exchange,提问作者t-Dawg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:35:28