MySQL 将重复的字段条目转换为重复的增量值

MySQL convert duplicate field entries to duplicate incrementing value

我目前有一个 table,它有一个用于多个条目的 parent_id 字段,即 4 个条目的相同 ID 号(如下面的屏幕截图所示)。我想将 parent_id 从 9000 向上转换为 运行,因此在屏幕截图中,000004 将在 4 个条目中变为 9000,000007 将在 4 个条目中变为 9001,依此类推(如示例结果所示).有谁知道实现这个的简单方法,因为我不想手动更改 2224 个条目!?

提前谢谢大家!

Table截图:

示例结果:

如果你运行的是 MySQL 8.0,你可以使用 dense_rank()

select
    t.*,
    8999 + dense_rank() over(order by parent_id) new_parent_id
from mytable t

在早期版本中,一个(效率较低的)选项使用相关子查询:

select
    t.*,
    9000 + (select count(distinct t1.parent_i) from mytable t1 where t1.parent_id < t.parent_id) new_parent_id
from mytable t

您似乎想要一个 update。如果是:

update t join
       (select t.*, row_number() over (order by id) as seqnum
        from t
       ) tt
       on t.id = tt.id
    set t.parent_id = 9000 + floor( (seqnum - 1) / 4);

请注意,这会忽略当前的 parent_id,根据 id.

将相同的值分配给每组 4 行

编辑:

在 MySQL 的旧版本中:

update t join
       (select t.*, (@rn := @rn + 1) as seqnum
        from (select t.* from t order by id) t cross join
             (select @rn := 0) params
       ) tt
       on t.id = tt.id
    set t.parent_id = 9000 + floor( (seqnum - 1) / 4);