繁体   English   中英

Mysql @count:= @count + 1更新列基于另一个查询的排序顺序

[英]Mysql @count:= @count + 1 update column based on the sort order of another query

我有一个带有2列别名的表(都为小写)和排序

如何根据列别名按字母顺序将数字0设置为x?

根据另一个查询的排序顺序更新列(通过别名选择mytable顺序)?

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,...。

谢谢

您可以使用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+演示

您可以在UPDATE语句中使用ORDER BY子句:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM