今天遇到一个业务性很强的问题。
应该不是很通用。
实验数据初始化:
Priority字段是编辑手工填上去的,很有可能是重复的。
业务的需求是先根据Priority排序,然后在根据id排序,对结果生成一个顺序连续的行号,然后更新到Priority字段。
处理的SQL如下:
通过自定义变量,给排序的结果附加一个行号列,然后通过id更新源表。
更新后的结果已经符合业务的要求了。
如果是Oracle数据库,这个就简单多了。
应该不是很通用。
实验数据初始化:
- create table test
- (
- id int primary key ,
- Priority int not null
- );
-
- insert into test values(30,1),(31,1),(32,1),(33,2),(34,3),(35,4),(36,4),(37,5),(38,5);
- commit;
![](http://img.blog.itpub.net/blog/attachment/201407/16/29254281_1405494409zi6o.jpg?x-oss-process=style/bb)
Priority字段是编辑手工填上去的,很有可能是重复的。
业务的需求是先根据Priority排序,然后在根据id排序,对结果生成一个顺序连续的行号,然后更新到Priority字段。
处理的SQL如下:
- UPDATE (SELECT @a := @a + 1 AS rn, id
- FROM test, (SELECT @a := 0
- ) t
- ORDER BY Priority, id
- ) t1, test t2
- SET t2.Priority = t1.rn
- WHERE t2.id = t1.id;
![](http://img.blog.itpub.net/blog/attachment/201407/16/29254281_1405494770p2tq.jpg?x-oss-process=style/bb)
更新后的结果已经符合业务的要求了。
如果是Oracle数据库,这个就简单多了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29254281/viewspace-1220458/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/29254281/viewspace-1220458/