Обновите поле в таблице с порядковым номером уникального значения другого поля - PullRequest
0 голосов
/ 14 января 2019

У меня есть таблица «my_table» с двумя полями: «name» и «name_id». Поле "name_id" является числом.

name| name_id
----+---------
foo | NULL
foo | NULL
bar | NULL
bar | NULL
bar | NULL

Мне нужно обновить поле «name_id» с помощью порядкового номера уникального значения поля «name», чтобы таблица результатов выглядела следующим образом:

name| name_id
----+---------
foo | 1
foo | 1
bar | 2
bar | 2
bar | 2

Я написал мини-программу для MySQL:

SET @counter := 0;
UPDATE    
    (
        SELECT `name`, (@counter := @counter + 1) AS `newId`
        FROM
            (
                SELECT DISTINCT `name`
                FROM `my_table`
                ORDER BY `name`       
            ) AS `temp`
    ) AS `src` RIGHT JOIN `my_table` AS `dest` ON `dest`.`name` = `src`.`name`
SET`dest`.`name_id` = `src`.`newId`;

Правильно ли это решение? Где лучшие решения для решения этой задачи?

1 Ответ

0 голосов
/ 14 января 2019

В MySQL вы можете использовать переменные:

set @rn := 0;
set @n := '';

update my_table
    set name_id = (@rn := if(@n = name, @rn,
                             if(@n := name, @rn + 1, @rn + 1)
                            )
                  )
   order by name;
...