2014-10-11 2 views
0

열 이름 ID (기본 키)가있는 테이블이 있습니다. 이에마지막 행에서 시작하는 sql의 열 값 업데이트

I 109에서 152까지의 ID가 1

씩 증가 있도록 내가이 SQL을 실행하면 1에서 152

에 값이 지금은 테이블을 업데이트 할이

update category set id=(id+1) where id<152 and id>108 

ID = 109에서 110으로 업데이트하면 다음 행에 110의 중복이 있기 때문에 오류가 발생합니다.

어떻게 그렇게 할 수 있습니까?

나는 152이다 마지막 행에서 업데이트를 시작하고 두 단계를 수행 (108)

+3

는 SQL Server 또는 MySQL을 사용하고 있습니까? –

+1

업데이트하기 전에 이미 테이블에'109'와'152' 사이에 값이 있고'id'가 기본 키인 경우 업데이트하기 전에 가능한 중복 값을 삭제하지 않으면 업데이트를 수행 할 방법이 없습니다. 그 외에, 당신의 마음을 구성하고/또는 어떤 RDBMS를 사용하고 계신지 – Barranka

답변

3

나는 당신이 MySQL을 사용하고 있다고 생각합니다. 그렇다면 order by을 사용하여이 작업을 수행 할 수 있습니다.

update category 
    set id = id + 1 
    where id > 108 and id < 152 
    order by id desc; 

id의 양성 가정하면, 다음은 모든 데이터베이스에서 작동합니다 (열은 "서명"선언되지 않은 가정) :

update category 
    set id = -(id + 1) 
    where id > 108 and id < 152; 

update category 
    set id = -id 
    where id < 0; 
+0

나와 함께 잘 작동합니다. 감사. –

+0

@SunilKumar - FYI, SQL 서버는 원래 쿼리를 원하는대로 실행합니다. –

0

에 중지 할 수 있습니다. 먼저 10,000 (또는 다른 미사용 범위)을 더한 다음 9999를 뺍니다. 두 번째 단계에서 기준을 조정하는 것을 잊지 마십시오.

+0

도 좋은 생각을 말해주십시오. 그것은 또한 잘 작동합니다. 감사합니다 –