我在mysql中有一个表,其中有一个包含文本值的列,比如说宠物。因此,我会有一个价值观的专栏宠物:“猫”,“狗”,“乌龟”,“猫”,“猫”,“乌龟”。实际上,在该专栏中有数十万种不同的宠物类型,但许多重复。
我想要做的是创建第二列,它对第一列中的每个条目都有一个索引。例如,在上述情况下,我们会指定“cat”的id为1,“狗”的id为2,“海龟”的id为3等,最后得到一个值为1、2、3、1、1、3的列。
有办法这样做吗?(最好是一种快速的方法,因为表超过700万行)。
发布于 2015-07-24 01:24:12
创建一个具有查找值的新表。您可以轻松地做到这一点:
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;然后,我建议从原始表中删除pettype列。
注意:您可以在不创建新表的情况下完成上述操作。但是我认为为这个列创建一个新的查找表是正确的方法。
https://stackoverflow.com/questions/31600643
复制相似问题