2014-02-07 32 views
-1

有這個表:更新與ORDER BY在MySQL

ID  SEQ  C2  C3  C4  C5 

359  1  287  1  2  1 

360  1  287  1  1  1 

361  2  287  1  2  1 

362  2  287  1  1  1 

363  4  287  1  2  1 

368  4  287  1  2  1 

369  5  287  1  1  1 

370  7  287  1  2  1 

371  4  287  1  1  1 

372  6  287  1  2  1 

而且要更新只有SEQ列的輸出:

ID  SEQ  C2  C3  C4  C5 

359  1  287  1  2  1 

360  1  287  1  1  1 

361  2  287  1  2  1 

362  2  287  1  1  1 

363  3  287  1  2  1 

368  4  287  1  2  1 

369  3  287  1  1  1 

370  5  287  1  2  1 

371  4  287  1  1  1 

372  6  287  1  2  1 

列C2,C3,C4,C5定義一個服務。列SEQ定義版本,ID = 361是服務的一個新版本在ID 359.

order byC2C3C4C5定義,並刪除序列中的間隙(SEQ列)。

謝謝

+0

*爲什麼*你會*想*做*那*? – Strawberry

+0

我有這個系統,造成這種差距,客戶希望這個問題得到解決。系統不工作與seq列中的差距,我需要直接修復數據庫。 – Paul

+0

考慮從表中刪除seq列。一般來說,存儲可以從其他存儲數據輕鬆派生的數據並不是一個好主意。 (雖然,我不得不承認在你的例子中我看不到序列邏輯!)另外,任何時候你有通過something_n命名something_1的列,警報響鈴應該開始正常化。 – Strawberry

回答

0

完成!

SET @rownumber = 0;

更新表t集t.SEQ =(如果(t.seq < @ ROWNUMBER,@ ROWNUMBER:= 1,@ ROWNUMBER:= @ ROWNUMBER + 1)) 爲了通過t.C2,t.C3,叔.C4,t,C5,t.SEQ;