Как добавить идентификаторы для каждого уникального значения в таблице
У меня есть таблица в MySQL, которая имеет столбец, заполненный текстовыми значениями, скажем, домашние животные. Таким образом, у меня был бы столбец домашних животных со значениями, такими как: "кошка", "собака", "черепаха", "кошка", "кошка", "черепаха". В действительности в этой колонке находятся сотни тысяч различных типов домашних животных, но многие повторяются.
Что я хотел бы сделать, это создать второй столбец, который имеет индекс для каждой записи в первом столбце. Так, например, в вышеприведенном случае мы присвоили бы "cat" идентификатор 1, "собаке" идентификатор 2, "черепаху" 3 и т. Д. И получили бы столбец со значениями: 1, 2, 3 1, 1, 3
Есть ли способ сделать это? (желательно быстрый способ, так как в таблице более 7 миллионов строк).
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;
Затем вы можете легко добавить, обновить или просто использовать столбец в select:
alter table pets add petttypeid int;
update pets p join
pettypes pt
on p.pettype = pt.pettype
set p.pettypeid = pt.pettypeid;
Затем я бы порекомендовал вам удалить pettype
столбец из исходной таблицы.
Примечание: вы можете сделать выше, не создавая новую таблицу. Но я думаю, что создание новой таблицы поиска для этого столбца - правильный путь.