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

如何为vehicle表新增的is_default字段批量回填历史数据

解决Vehicle表is_default字段的填充问题

你的SQL逻辑存在漏洞:子查询仅过滤了单条记录的is_default=0,但没有排除那些已经存在is_default=1记录的model。哪怕某个model已经有默认颜色,只要它还有is_default=0的记录,子查询就会选中该model的MIN(id),进而执行UPDATE操作,导致该model出现多个is_default=1的记录,违反了规则2。

要满足你的需求,必须先筛选出完全没有默认颜色的model,再对这类model指定一条记录设为默认。以下是两种可行的写法:

方法一:使用NOT EXISTS筛选无默认值的model

UPDATE vehicle AS scl
JOIN (
    SELECT model, MIN(id) AS min_id
    FROM vehicle
    WHERE NOT EXISTS (
        SELECT 1 
        FROM vehicle AS sub
        WHERE sub.model = vehicle.model 
          AND sub.is_default = 1
    )
    GROUP BY model
) AS sc ON scl.model = sc.model AND scl.id = sc.min_id
SET scl.is_default = 1;

方法二:使用LEFT JOIN筛选无默认值的model

UPDATE vehicle AS scl
JOIN (
    SELECT v.model, MIN(v.id) AS min_id
    FROM vehicle v
    LEFT JOIN vehicle v_default 
        ON v.model = v_default.model 
        AND v_default.is_default = 1
    WHERE v_default.id IS NULL
    GROUP BY v.model
) AS sc ON scl.model = sc.model AND scl.id = sc.min_id
SET scl.is_default = 1;

这两种写法的核心逻辑一致:先排除所有已有is_default=1记录的model,仅对完全没有默认颜色的model,选取其id最小的记录将is_default设为1,完美符合你提出的两条规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 15:18:24