0

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

4

1 回答 1

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

于 2014-07-29T12:46:58.727 回答