我有一个表“ my_table”,其中有两个字段:“名称”和“名称_id”。字段“ name_id”是一个数字。
name| name_id
----+---------
foo | NULL
foo | NULL
bar | NULL
bar | NULL
bar | NULL
我需要使用“名称”字段唯一值的序列号更新“名称_id”字段,因此结果表如下所示:
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`;
此解决方案正确吗?在哪里有更好的解决方案来完成此任务?
答案 0 :(得分:1)
在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;