2014-10-11 75 views
0

我有一個具有列名稱ID(主鍵)的表。更新從最後一行開始的SQL中的列值

在這個

我從1到152

值現在我想更新表,以便編號從109到152的1

遞增,當我運行該SQL

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

它給出錯誤,因爲當它將ID = 109更新爲110時,它在下一行發現110的重複。

所以我該怎麼做。

我就可以開始從最後一排是152更新和制止對108

+3

你使用SQL Server或MySQL? – 2014-10-11 06:21:27

+1

如果在更新之前,表中的表格中的'109'和'152'之間已經存在值,並且'id'是主鍵,則無法執行更新,除非在更新前刪除可能的重複值。除此之外,下定決心和/或告訴我們您使用的是哪種RDBMS – Barranka 2014-10-11 06:23:39

回答

3

我猜你正在使用MySQL。如果是這樣,您可以使用order by來做到這一點。

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

假設id s爲正,下面應該在任何數據庫工作(假設列不宣佈 「無符號」):

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

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

,這對我很好。謝謝。 – 2014-10-11 06:27:50

+0

@SunilKumar - 僅供參考,SQL服務器根據需要執行原始查詢。 – 2014-10-11 06:38:40

0

做它在兩個步驟。首先添加10,000(或任何其他未使用的範圍),然後減去9999.不要忘記在第二步中調整標準。

+0

也是一個好主意。它也會正常工作。謝謝 – 2014-10-11 06:36:31

相關問題