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

MySQL中基于ID匹配及条件从另一表更新表的问题

正确的MySQL关联更新语句实现

没问题,我来帮你搞定这个需求!根据你描述的规则,这里有两种符合MySQL语法的更新写法,都是基于pdb_id匹配的前提来更新005_my_cl的listing_type字段:

方法1:使用JOIN的更新写法(推荐,可读性更好)

这种写法是MySQL中关联更新的标准方式,逻辑清晰,不容易出错:

UPDATE 005_my_sc sc
INNER JOIN 005_my_cl cl 
    ON sc.pdb_id = cl.pdb_id
SET cl.listing_type = CASE 
    WHEN sc.listing_type = 'new' THEN 2
    WHEN sc.listing_type = 'rent' THEN 1
    WHEN sc.listing_type = 'sale' THEN 2
    ELSE cl.listing_type -- 保留原字段值,避免未定义的类型导致错误更新
END;

方法2:沿用你开头的多表逗号分隔写法

如果你习惯用逗号分隔表的写法,也可以这样写,效果和上面完全一致:

UPDATE 005_my_sc sc, 005_my_cl cl
SET cl.listing_type = CASE 
    WHEN sc.listing_type = 'new' THEN 2
    WHEN sc.listing_type = 'rent' THEN 1
    WHEN sc.listing_type = 'sale' THEN 2
    ELSE cl.listing_type
END
WHERE sc.pdb_id = cl.pdb_id; -- 必须加这个WHERE条件,否则会误更新表中所有行!

重要提示

在执行更新之前,强烈建议先跑下面的查询语句验证映射结果是否正确,避免误操作:

SELECT 
    sc.pdb_id,
    sc.listing_type AS sc_table_type,
    cl.listing_type AS cl_original_type,
    CASE 
        WHEN sc.listing_type = 'new' THEN 2
        WHEN sc.listing_type = 'rent' THEN 1
        WHEN sc.listing_type = 'sale' THEN 2
        ELSE cl.listing_type
    END AS cl_expected_type
FROM 005_my_sc sc
JOIN 005_my_cl cl ON sc.pdb_id = cl.pdb_id;

这样你可以提前确认每个匹配的pdb_id对应的更新值是否完全符合你的要求,没问题再执行更新语句。

内容的提问来源于stack exchange,提问作者Hoàng Việt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:14:21