使用序列号mysql更新列

时间:2011-07-07 20:54:26

标签: mysql sql sorting

我有一个包含列的表:(这只是一个例子,我有50K记录)

Name,   Number

Joe     Null
Michael Null
Moses   Null

我用1-3中的序列号更新号码,所以它看起来像这样:

Name,   Number

Joe     1
Michael 2
Moses   3

如何在一个SQL命令的SQL for Mysql中执行此操作

4 个答案:

答案 0 :(得分:96)

SET @rank:=0;
update T
set Number=@rank:=@rank+1;

<强>更新

一种陈述的替代方式

UPDATE T
JOIN (SELECT @rank := 0) r
SET Number=@rank:=@rank+1;

答案 1 :(得分:2)

您可以尝试将Number设置为AUTO_INCREMENT,以便生成数字:

ALTER TABLE your_table MODIFY Number INT AUTO_INCREMENT

除此之外,您可能还需要: a)存储的例程 b)申请代码

答案 2 :(得分:2)

我努力在网上找到答案,并发现以下方法适用于我,基于上面的一些信息,但使用不同的更新方法。发布在这里,以防它也帮助其他人。

注意:对于我的数据集,排名是一次性固定计算,它不会发生变化。我想将它添加为一列,以便在每次将数据从MySQL提取到Python时保存运行计算。

我使用的解决方案:

  • 将等级设为0(如上所述)
  • 创建一个包含select计算等级的临时表来计算等级
  • 使用计算的排名更新原始表。

使用的样本名称,rowid是每行的唯一标识符,value是用于确定每行的排名的度量标准

SET @rank=0;
CREATE TEMPORARY TABLE rank_temp
AS
(SELECT rowid, value, @rank:=@rank+1 AS rank FROM source_table ORDER BY value ASC);

UPDATE sourcetable a, rank_temp b
SET a.rank = b.rank
WHERE a.rowid = b.rowid;

这是一个粗略的方法,但已经处理了我的数据集。

答案 3 :(得分:0)

update `table_name` set `Number`=@rank:=@rank+1

这将完成。谢谢