Postgresql用随机值更新每一行

时间:2016-04-06 22:08:01

标签: sql postgresql

这与其他问题类似,但它似乎因数据库逐个数据库的实现而异。我使用的是postgres,NEWID之类的东西似乎不存在。

这就是我想要的工作:

update foo set bar = (select floor(random() * 10) + 1);

我理解为什么它没有但我似乎无法找到适合Postgres的合适解决方案。我希望bar的值是1到10之间的随机数,它与行不同。

2 个答案:

答案 0 :(得分:21)

我认为Postgres可能会优化子查询。这不起作用吗?

update foo
   set bar = floor(random() * 9 + 1);  -- from 1 to 10, inclusive

答案 1 :(得分:3)

对于PostgreSQL(在9.5上测试),可以通过添加伪造的“ where”子句来解决

update foo set bar = (select floor(random() * 10) + 1 where foo.id = foo.id);