我在mysql中有一个表,其中有一列填充了文本值,让我们说宠物。所以我会有一个列宠物,其价值如下:" cat"," dog"," turtle"," cat",&#34 ; cat"," turtle"。实际上,该列中有数十万种不同的宠物类型,但很多都是重复的。
我想要做的是创建第二列,其中第一列中的每个条目都有一个索引。例如,在上述情况下,我们会分配“猫”和“猫”。 id为1,' dog' id为2,' turtle'等等,最后得到一个值为1,2,3,1,1,3
的列有办法做到这一点吗? (最好是快速的方式,因为桌子超过700万行)。
答案 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
列。
注意:您可以在不创建新表的情况下执行上述操作。但我认为为此列创建一个新的查找表是正确的方法。