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

如何将同一张SQL表中指定列的特定单元格映射到该列其他指定单元格

同表指定行批量替换列值的正确SQL写法

你原有写法的核心问题是两个子查询没有配置对应映射关系,会产生笛卡尔积,无法实现「id1取id3的值、id2取id5的值」的精准匹配需求。以下是两种可直接运行的实现方案:

通用兼容写法(所有关系型数据库均支持)

通过CASE WHEN加子查询实现,逻辑直观,适合映射对较少的场景:

UPDATE Book
SET payload = CASE id
    WHEN 1 THEN (SELECT payload FROM Book WHERE id = 3)
    WHEN 2 THEN (SELECT payload FROM Book WHERE id = 5)
    -- 更多映射对直接加WHEN分支即可
    ELSE payload
END
WHERE id IN (1,2);

仅会修改id为1、2的行,不会影响其他数据,安全性高。

批量映射友好写法(支持UPDATE JOIN的数据库,如MySQL、PostgreSQL 12+)

如果需要替换的映射对较多,可以先构造映射关系派生表再关联更新:

UPDATE Book target
JOIN (
    -- 这里维护目标id和源id的对应关系
    SELECT 1 AS target_id, 3 AS source_id UNION ALL
    SELECT 2 AS target_id, 5 AS source_id
) AS mapping ON target.id = mapping.target_id
JOIN Book source ON source.id = mapping.source_id
SET target.payload = source.payload;

新增映射对时只需在mapping派生表中新增对应UNION ALL行即可,无需修改其他逻辑。

内容的提问来源于stack exchange,提问作者Lester Dela Cruz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 23:48:01