如何为 table 中的每个唯一值添加 ID

How to add IDs to each unique value in a table

我在 mysql 中有一个 table,其中有一列填充了文本值,比方说宠物。所以我会有一个 pets 列,其值如下:"cat"、"dog"、"turtle"、"cat"、"cat"、"turtle"。实际上,该列中有数十万种不同的宠物类型,但有很多重复。

我想做的是创建第二列,它为第一列中的每个条目创建一个索引。因此,例如,在上述情况下,我们将分配 'cat' 1 的 id,'dog' 2 的 id,3 的 'turtle' 等,最后得到一个包含值的列: 1, 2, 3, 1, 1, 3

有办法吗? (最好是一种快速方法,因为 table 超过 700 万行)。

使用查找值创建一个新的 table。您可以轻松做到这一点:

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

然后您可以轻松添加、更新或仅使用 select 中的列:

alter table pets add petttypeid int;

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

然后我建议您从原来的 table 中删除 pettype 列。

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