mysql@count:=@count+1根据另一个查询的排序顺序更新列

zf9nrax1  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(354)

我有一个表,有两列别名(都是小写)和顺序
如何根据列别名按字母顺序将数字0设置为x?
根据另一个查询的排序顺序更新列(按别名选择mytable order)?

to get

alias         |   ordering
abf-ergterw   |   0
crdsv-dfgdfg  |   2
bggg-rgewrdg  |   1
dxgg-rgewrdg  |   3

像这样的

SET @count = 0;
UPDATE mytable SET ordering = @count:= @count + 1;

但基于列别名a=1,b=2,c=3。。。。
谢谢您

hmmo2u0o

hmmo2u0o1#

你可以用 ROW_NUMBER :

SELECT *, ROW_NUMBER() OVER(ORDER  BY alias ASC) - 1 AS ordering
FROM tab
ORDER BY ordering;

以及 UPDATE :

UPDATE tab a
JOIN (
  SELECT *, ROW_NUMBER() OVER(ORDER  BY alias ASC) - 1 AS ord
  FROM tab
  ) b ON a.alias = b.alias
SET a.ordering = b.ord
;

mysql 8.0+演示

jei2mxaa

jei2mxaa2#

可以在update语句中使用order by子句:

SET @count = -1;
UPDATE mytable
SET ordering = @count:= @count + 1
ORDER BY alias ASC;

演示:http://sqlfiddle.com/#!9/34e664/1号

相关问题