我想在Postgres中更新表的随机20%值,我想为此属性分配旧属性+具有特定限制的随机数,我希望每行的这个随机数必须不同。< / p>
我目前正在这样做:
update tab_ex
set val = (SELECT val + (SELECT random()*2000 FROM generate_series(20,2000) LIMIT 1))
where id in (select id from tab_ex order by random() limit (select count(*)*0.2 from tab_ex));
并且它正在更新我的表的20%,但它正在使用每行的特定随机数进行更新,而不是为每次更新更改此随机数。
答案 0 :(得分:1)
我在其他数据库中看到了这个问题,其中子查询得到了优化而且#34;即使它有一个易变的功能。这可能发生在这里。一种可能性是删除子查询:
update tab_ex
set val = val + random() * 2000
where id in (select id
from tab_ex
order by random()
limit (select count(*)*0.2 from tab_ex)
);
对于每个要更新的行,这应该重新运行random()
。