我有一个名为版本的列,其中有2-300.000的数字。
在该栏目中,我删除了一些版本号码,因此数字从2-300.000不连续,缺少一些数字。
我需要纠正它,以便再次连续。 这很容易,可以用
完成SET @ver := 1;
UPDATE geo_patch SET Version = ( SELECT @ver := @ver + 1 ) ORDER BY Version DESC;
我的问题是有相同版本号的重复项,我需要将它们保留为重复项,但仍然使用新版本号更新它们。
答案 0 :(得分:0)
您希望使用新的序列号更新现有版本号,但请保留重复项。为此,请使用join
并在子查询中计算新版本:
UPDATE geo_patch gp JOIN
(select distinct version, (@ver := @ver + 1) as newver
from geo_patch cross join (select @ver := 0) vars
order by version
) gp2
ON gp.version = gp2.version
set gp.Version = gp2.newver;
MySQL可能对group by
的变量很挑剔。我不确定distinct
是否存在同样的怪异。所以上面的内容可能会出错。以下应该肯定有用:
UPDATE geo_patch gp JOIN
(select version, (@ver := @ver + 1) as newver
from (select distinct version from geo_patch) gp2 cross join
(select @ver := 0) vars
order by version
) gp2
ON gp.version = gp2.version
set gp.Version = gp2.newver;