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

跨行交换列值:员工表firstname字段更新需求

实现员工firstname字段的跨行交换

先明确你的数据场景:
原员工表数据:

id,firstname
1,john
2,pall
3,kevin
4,Alan

期望更新后的结果:

id,firstname
1,kevin
2,Alan
3,john
4,pall

我给你整理了两种实用的SQL实现方案,按需选择即可:

方案一:用CASE WHEN直接更新

这种方式逻辑直观,适合这种固定ID对的交换场景,不需要额外临时表:

UPDATE employees
SET firstname = CASE id
    WHEN 1 THEN (SELECT firstname FROM employees WHERE id = 3)
    WHEN 3 THEN (SELECT firstname FROM employees WHERE id = 1)
    WHEN 2 THEN (SELECT firstname FROM employees WHERE id = 4)
    WHEN 4 THEN (SELECT firstname FROM employees WHERE id = 2)
    ELSE firstname -- 其他ID的记录保持不变
END
WHERE id IN (1,2,3,4); -- 仅更新目标ID的记录

方案二:通过自连接更新

如果你的数据库支持自连接更新,这种方式执行效率会更高:

UPDATE employees e1
JOIN employees e2 ON (
    (e1.id = 1 AND e2.id = 3) OR
    (e1.id = 3 AND e2.id = 1) OR
    (e1.id = 2 AND e2.id = 4) OR
    (e1.id = 4 AND e2.id = 2)
)
SET e1.firstname = e2.firstname;

重要提醒

  • 执行更新前一定要先备份数据,或者先把UPDATE换成SELECT语句验证逻辑是否正确,避免误操作。
  • 如果你的表名不是employees,记得替换成实际使用的表名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:10:27