2014-05-13 2 views
0

값이 0 인 열을 해당 열의 최대 값으로 업데이트하려고합니다 (단일 쿼리에서).단일 쿼리의 각 업데이트에서 열을 최대 열로 업데이트하십시오.

값이 0 인 레코드가 많이 있습니다.

UPDATE table SET field = (SELECT MAX(field) + 1) WHERE field = 0; 

을하지만 같은 값에 각 레코드를 업데이트합니다

나는이 일을하고있다. 각 행을 업데이트 할 때 최대 값을 얻을 수 있습니까?

+2

나는 그것을 얻지 못합니다 : 왜 매회마다 업데이트가 바뀌어야합니까? 최대 값은 업데이트 이후에도 항상 최대 값입니다. –

+1

테이블 구조를 제공 할 수 있습니까 – Snehal

+0

@Lorenzo Marcon 0으로 3 개의 레코드가 있다고 가정합니다. 처음에 최대 값을 101로 업데이트하면 나머지 두 값은 102와 103이어야합니다. 101을 각각 넣는다. – Vitthal

답변

2

다음 숫자로 시작하는 값이으로 증가하는 것으로 보입니다. 여기 하나의 방법이 있습니다 :

update table t cross join 
     (select @rn := max(field) from table) var 
    set t.field = (@rn := @rn + 1) 
    where field = 0; 
+0

그것의 작업 :) 조금 수정 ... '업데이트 테이블 t 교차 결합 (선택 @ rn : = (테이블에서 max (field) 선택) var set t.field = (@rn : = @rn + 1) where field = 0; ' – Vitthal

+1

@ 비타민. . . 추가 하위 쿼리가 필요하지 않습니다. 쿼리가 수정되었습니다. –

+0

예 .. 당신 말이 맞습니다. 감사..!! – Vitthal

관련 문제