如果我有这样一张表:
PersonId
Joe
Joe
Joe
Joe
Frank
Frank
Frank
Frank
想要让它看起来像这样:
PersonId id
Joe 1
Joe 2
Joe 3
Joe 4
Frank 1
Frank 2
Frank 3
Frank 4
我该怎么做?类似于 alter table add id int auto_increment, add primary key (id)
但是有更多的参数使自动增量在每个新名称后重置并且没有主键因为会有重复的值。
最佳答案
试试这个在飞行中做:
select personid,
(@rn := if(@p = personid, @rn + 1,
if(@p := personid, 1, 1)
)
) as id
from your_table cross join
(select @rn := 0, @p := 0) vars
order by personId;
这在两个具体方面与 Juergen 的回答不同。首先,有一个明确的order by
,因为您不能依赖没有order by
的select
的排序。其次,使用的两个变量都在一个语句中赋值。 MySQL 不保证 select
中语句的计算顺序,因此唯一安全的方法是使用单个语句。
关于mysql - 如何为 MySQL 中的每个新人分配重新启动的自动递增 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27573844/