我想添加从1到100编号的电子邮件。所以我有效地想做一些事情:
tmp := 0
update user SET tmp = tmp + 1, email = 'test' || TO_CHAR(tmp,'fm00000') || '@example.com'
where removed = false
ORDER BY id
limit 100;
最好希望它能在8.3中使用。注意 - 我不能使用id,因为它们在所选行中不是1到100。
编辑:忘了我在8.3 ......
答案 0 :(得分:1)
你不需要在Postgres中修改变量。只需使用窗口功能。不幸的是,窗口函数不能直接在UPDATE
语句中使用,但这可以很容易地与CTE结合使用:
with numbered_users as (
select id,
row_number() over (order by email) as rn
from users
where removed = false
)
update users
set email = 'test' || TO_CHAR(nu.rn,'fm00000') || '@example.com'
from numbered_users nu
where rmoved = false
and users.id = nu.id;
这假定id
列是唯一的