用增量值 Postgres 更新每一行

Rog*_*des 5 sql database postgresql

我想在 Postgres 中更新表中的每一行并将每一行设置为不同的值;这个值将是一个带有起始值的增量值。

例如,假设我有tab_a包含以下数据的表:

|attr_a|attr_b|
|1     |null  |
|2     |null  |
|3     |null  |
|4     |null  |
Run Code Online (Sandbox Code Playgroud)

我可能想要的输出是:

|attr_a|attr_b|
|1     |5     |
|2     |6     |
|3     |7     |
|4     |8     |
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

UPDATE tab_a
SET attr_b = gen.id
FROM generate_series(5,8) AS gen(id);
Run Code Online (Sandbox Code Playgroud)

但是没有按预期工作......

Zig*_*ter 8

你可以做

UPDATE tab_a upd
SET attr_b = row_number + 4 -- or something like row_number + (select max(attr_a) from tab_a)
FROM (
  SELECT attr_a, row_number() over ()
  FROM tab_a
  ORDER BY 1
  ) a
WHERE upd.attr_a = a.attr_a;
Run Code Online (Sandbox Code Playgroud)