如何在PostgreSQL UPDATE语句中增加变量

时间:2014-07-29 12:18:24

标签: postgresql postgresql-8.3

我想添加从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 ......

1 个答案:

答案 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列是唯一的