使用增量值Postgres更新每一行

时间:2016-05-10 16:02:14

标签: sql database postgresql

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

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

|attr_a|attr_b|
|1     |null  |
|2     |null  |
|3     |null  |
|4     |null  |

我可能想要的输出是:

|attr_a|attr_b|
|1     |5     |
|2     |6     |
|3     |7     |
|4     |8     |

这是我的剧本:

UPDATE tab_a
SET attr_b = gen.id
FROM generate_series(5,8) AS gen(id);

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

2 个答案:

答案 0 :(得分:3)

你可以做到

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;

答案 1 :(得分:-1)

做这样的事情

UPDATE pr_conf_item upd
SET item_order = a.row_number
FROM (
       SELECT id, row_number() over ()
       FROM pr_conf_item
       ORDER BY 1
     ) a
WHERE upd.id = a.id;