2014-02-07 27 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;