[英]MySQL Query - Update field with order/count but start at 1 again based on another field
[英]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
;
您可以在UPDATE语句中使用ORDER BY子句:
SET @count = -1;
UPDATE mytable
SET ordering = @count:= @count + 1
ORDER BY alias ASC;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.