我想更新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);
但是没有按预期工作......
答案 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;