簡體   English   中英

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

我的第一個想法是使用 order 和 limit inside update,但那些在那里不起作用。 我認為的另一個選擇是在更新中使用 select。

但我不太確定,這就是我來這里的原因。 任何讓 sql 更新 200 個不同的隨機行的想法都很棒。

假設foo是您的主鍵,您可以執行 CTE 和半連接:

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。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM