我正在使用 postgres 10,我希望隨機化一些資料。
我首先創建一個臨時表并用 1,000 行隨機資料填充它。
然后,我想將其合并到另一個表中,該表的行數可能少于或多于隨機資料。
對于我的維度表中的每一行,我想從臨時表中的隨機資料中選擇一個隨機行,將維度表中的值設定為臨時表中隨機選擇的行值。
例如。
我有一個名為reference.tv_shows的表,其中包含Name和Category欄位。
我有一個名為random_tv_shows的臨時表,其中包含Name和Category欄位。該資料是完全隨機的,由 1,000 行組成。
我想遍歷reference.tv_shows中的每一行并在random_tv_shows表中選擇一個隨機行,并將reference.tv_shows名稱和類別設定為random_tv_shows中所選行的名稱。
我嘗試運行一個相當簡單的選擇,但它看起來好像它會自我評估一次然后更新(或者也許 RANDOM() 每個 TX 只隨機一次?)。
UPDATE reference.tv_shows SET "Name" = (SELECT "Name" FROM random_tv_shows ORDER BY RANDOM() LIMIT 1)
有沒有辦法在 postgres 中做到這一點?
uj5u.com熱心網友回復:
當我有一個test表格,欄位a是一個整數時,
如果我這樣做:
update test set a=random()*1000;
如果會為我的表中的每條記錄獲取隨機值。
但是當我這樣做時:
update test set a=(select random()*1000);
的所有值a都將相同。
這顯示在此DBFIDDLE
因為,在更新 table 時reference.tv_shows,您只希望更新 1 個 tv_show,因此您需要為每個 tv_show 提供一個唯一識別符號。目前該資訊在問題中不可用。
編輯:我試圖重現您的資料(記錄較少,并且對類別缺乏想象力,但是......??)。
當您的表中有唯一 id 時,您可以執行以下操作:
UPDATE tv_shows
SET Name = rts.Name,
Category = rts.Category
FROM tv_shows ts
INNER JOIN (SELECT ROW_NUMBER() OVER () R, Name, Category
FROM random_tv_shows
ORDER BY RANDOM()) rts on rts.R = ts.id
WHERE tv_shows.id = ts.id
見DBFIDDLE
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/443414.html
標籤:PostgreSQL
