mysql查询更新重复

时间:2014-10-19 13:51:14

标签: mysql sql set sql-update

我有一个名为版本的列,其中有2-300.000的数字。

在该栏目中,我删除了一些版本号码,因此数字从2-300.000不连续,缺少一些数字。

我需要纠正它,以便再次连续。 这很容易,可以用

完成
SET @ver := 1;
UPDATE geo_patch SET Version = ( SELECT @ver := @ver + 1 ) ORDER BY Version DESC;

我的问题是有相同版本号的重复项,我需要将它们保留为重复项,但仍然使用新版本号更新它们。

1 个答案:

答案 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;