MySQL自定义变量处理行号问题

今天遇到一个业务性很强的问题。
应该不是很通用。

实验数据初始化:
  1. create table test
  2. (
  3.     id int primary key ,
  4.     Priority int not null
  5. );

  6. insert into test values(30,1),(31,1),(32,1),(33,2),(34,3),(35,4),(36,4),(37,5),(38,5);
  7. commit;


Priority字段是编辑手工填上去的,很有可能是重复的。
业务的需求是先根据Priority排序,然后在根据id排序,对结果生成一个顺序连续的行号,然后更新到Priority字段。

处理的SQL如下:
  1. UPDATE (SELECT @a := @a + 1 AS rn, id
  2.     FROM test, (SELECT @a := 0
  3.         ) t
  4.     ORDER BY Priority, id
  5.     ) t1, test t2
  6. SET t2.Priority = t1.rn
  7. WHERE t2.id = t1.id;
通过自定义变量,给排序的结果附加一个行号列,然后通过id更新源表。

更新后的结果已经符合业务的要求了。
如果是Oracle数据库,这个就简单多了。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-1220458/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29254281/viewspace-1220458/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值