ITPub博客

首页 > 数据库 > MySQL > MySQL自定义变量处理行号问题

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

原创 MySQL 作者:壹頁書 时间:2014-07-16 15:14:22 1 删除 编辑
今天遇到一个业务性很强的问题。
应该不是很通用。

实验数据初始化:
  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博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1220458/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: Sysbench基准测试
请登录后发表评论 登录
全部评论

注册时间:2013-10-19

  • 博文量
    620
  • 访问量
    6339997