使用1到n更新整个列

时间:2016-03-08 14:39:03

标签: mysql

我有一个表,其中有一个名为uid的列,它使用自动增量,并使用1,2,3等更新。现在我有cron作业删除了超过2天的行。所以现在我的uid列是2345到n ..我想再次将它重置为1到n。我试过下面的代码

UPDATE `tv` SET `uid` = '' 

我正在考虑遍历所有行并通过php脚本更新uid,是否还有其他单一SQL命令的替代方案?

2 个答案:

答案 0 :(得分:2)

您可以尝试这样的事情:

UPDATE `tv` t
set t.`uid` = (SELECT count(*)
               from `tv` s
               WHERE t.`uid` >= s.`uid`)

这将计算有多少uid小于或等于更新的uid,所以当第一个UID,即2345正在更新时,只有1个uid小于/等于他所以它会得到值1等等......

编辑:试试这个 -

UPDATE `tv` t
INNER JOIN(SELECT s.`uid`,count(*) as cnt
           from `tv` s
           INNER JOIN `tv` ss
            ON(s.`uid` >= ss.`uid`)
           GROUP BY s.`uid) tt
 ON(t.`uid`=tt.`uid`)
SET t.`uid` = tt.cnt

答案 1 :(得分:1)

为什么不通过以下方式减少uid:

update tv set uid = uid -1