今天遇到一个业务性很强的问题。
应该不是很通用。
实验数据初始化:
-
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;

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;
通过自定义变量,给排序的结果附加一个行号列,然后通过id更新源表。

更新后的结果已经符合业务的要求了。
如果是Oracle数据库,这个就简单多了。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29254281/viewspace-1220458/
,如需转载,请注明出处,否则将追究法律责任。