2014-10-19 6 views
0

나는 2-300.000의 숫자가 있다는 점에서 버전이라는 컬럼을 가지고있다.mysql query update dublicates

해당 열에서 일부 버전 번호가 삭제되어 번호가 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-rankfunction (답변 15 표) – Multisync

답변

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