Mysql: 对换(替换)两条记录的同一个字段值

需求:

前端进行展示数据的时候,经常有这么一个需求,就是将已经排序的列表进行调整顺序,比如
现在想把id为1的数据, 向下移一位,也就是和id为2major_id字段进行对调

 

第一种方案:

1.第一个值  =  查询出来第一条

2.第二个值  =  查询出来第二条


3.更新  第一条记录

4.更新  第二条记录



对数据库操作了4次。这种方案很容易被上司骂个半死



第二种方案:

UPDATE student set major_id = (
  CASE
		WHEN id=1 THEN (SELECT major_id FROM student WHERE id=2)
		WHEN id=2 THEN (SELECT major_id FROM student WHERE id=1)
	END)
WHERE id IN (1,2)



这种mysql  是不支持的。先查在更新。无法同时进行。

第三种方案:

UPDATE student a
JOIN student b
ON	(a.id =1 AND b.id=2) OR (a.id=2 AND b.id=1)
SET
	a.major_id =b.major_id,b.major_id = a.major_id



同一个表用内连接拼接,把第二个表的major_id给第一个表,第一个表的major_id给第二个表,也避免了重新包装一层select…from 假表的步骤

 

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值