2014-10-19 84 views
0

我有一个名为版本的colum,有2-300.000的数字。mysql查询更新dublicates

在该colum中,我删除了一些版本号,所以这些号码从2-300.000开始不连续,还有一些数字缺失。

我需要纠正它,所以它会再次连续。 这很容易,并且可以与

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

我的问题做的是存在具有相同版本号dublicates,我需要他们保持作为dublicates但仍然有新的版本号更新它们。

+0

您需要排名。你检查过了吗? http://stackoverflow.com/questions/3333665/mysql-rank-function(15票的答案) – Multisync 2014-10-19 14:07:38

回答

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; 
+0

它的工作原理,你是一个疯狂的古鲁:)! – Aggem8 2014-10-19 14:31:18