Postgresql更新200条随机记录
Postgresql update 200 random records
我有一个查询从我的数据库中返回 200 个随机不同的 foo。我想更新这些行的注释字段。
select distinct on (foo, random()) *
from test
order by random(), foo
limit 200
update test
notes = 'Flag'
order by random()
limit 200
我的第一个想法是在更新中使用顺序和限制,但那些在那里不起作用。
我认为的另一个选择是在更新中使用 select。
但我不太确定,这就是我来这里的原因。任何让 sql 更新 200 个不同的随机行的想法都很棒。
假设 foo
是您的主键,您可以执行 CTE 和 semi-join:
with cte as (
select foo
from test
order by random()
limit 200
)
update test t
set notes = 'Flag'
where exists (
select null
from cte c
where t.foo = c.foo
)
这对于大型数据集来说非常有效。
您也可以试试这个,它更容易遵循,但在性能方面的可扩展性较差。 200行应该没问题。
update test f1
set notes = 'Flag'
where foo in (select foo from test order by random() limit 200)
如果 foo 不是主键,则使用主键即可。如果您没有 PK,您可以使用所有列,但不能保证如果发生这种情况您只会更新 200。
我有一个查询从我的数据库中返回 200 个随机不同的 foo。我想更新这些行的注释字段。
select distinct on (foo, random()) *
from test
order by random(), foo
limit 200
update test
notes = 'Flag'
order by random()
limit 200
我的第一个想法是在更新中使用顺序和限制,但那些在那里不起作用。 我认为的另一个选择是在更新中使用 select。
但我不太确定,这就是我来这里的原因。任何让 sql 更新 200 个不同的随机行的想法都很棒。
假设 foo
是您的主键,您可以执行 CTE 和 semi-join:
with cte as (
select foo
from test
order by random()
limit 200
)
update test t
set notes = 'Flag'
where exists (
select null
from cte c
where t.foo = c.foo
)
这对于大型数据集来说非常有效。
您也可以试试这个,它更容易遵循,但在性能方面的可扩展性较差。 200行应该没问题。
update test f1
set notes = 'Flag'
where foo in (select foo from test order by random() limit 200)
如果 foo 不是主键,则使用主键即可。如果您没有 PK,您可以使用所有列,但不能保证如果发生这种情况您只会更新 200。