如何将ID添加到表中的每个唯一值

时间:2015-07-24 01:17:59

标签: mysql sql edit unique-index

我在mysql中有一个表,其中有一列填充了文本值,让我们说宠物。所以我会有一个列宠物,其价值如下:" cat"," dog"," turtle"," cat",&#34 ; cat"," turtle"。实际上,该列中有数十万种不同的宠物类型,但很多都是重复的。

我想要做的是创建第二列,其中第一列中的每个条目都有一个索引。例如,在上述情况下,我们会分配“猫”和“猫”。 id为1,' dog' id为2,' turtle'等等,最后得到一个值为1,2,3,1,1,3

的列

有办法做到这一点吗? (最好是快速的方式,因为桌子超过700万行)。

1 个答案:

答案 0 :(得分:1)

使用查找值创建一个新表。你可以很容易地做到这一点:

create table PetTypes as
    select (@rn := @rn + 1) as pettypeid, pettype
    from (select distinct pettype from pets) p cross join
         (select @rn := 0) params;

然后您可以轻松添加,更新或仅使用选择中的列:

alter table pets add petttypeid int;

update pets p join
       pettypes pt
       on p.pettype = pt.pettype
    set p.pettypeid = pt.pettypeid;

我建议您从原始表中删除pettype列。

注意:您可以在不创建新表的情况下执行上述操作。但我认为为此列创建一个新的查找表是正确的方法。