Как добавить идентификаторы для каждого уникального значения в таблице

У меня есть таблица в 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 столбец из исходной таблицы.

Примечание: вы можете сделать выше, не создавая новую таблицу. Но я думаю, что создание новой таблицы поиска для этого столбца - правильный путь.

Другие вопросы по тегам