人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Postgresqlで「ランダムで抽出した3件のレコードのみUPDATE」などということは可能でしょうか。

●質問者: studio15
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:postgreSQL ランダム レコード 抽出
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ●
●35ポイント

ランダムで抽出した3件のレコードを同じように更新して良いのであれば、以下のようなSQLはいかがでしょうか。

副問合せを使い、ランダムに抜き出した3件のidを含む行のcol1の値を'XXX'に、col2の値を'YYY'に更新します。

UPDATE sample
SET col1 = 'XXX' and col2 = 'YYY'
WHERE id IN (SELECT s2.id FROM sample s2 ORDER BY RANDOM() LIMIT 3)
;

それぞれ別の値に更新したいのであれば、SETの内容を変更し、LIMITを1に変更したものを3つ用意すれば良いです。

[参考URL]

参考になれば幸いです。


2 ● nandedarou
●35ポイント

random()関数があるのでストアドプロシージャ(PL/pgSQL)でも可能だと思います。

PL/pgSQLを使って書くのが大変ならば、

他の言語でも乱数が発生できるので、上記のロジックで可能だと思います。

「ランダムで抽出した3件のレコードのみUPDATE」する手順は次のようになるのではないでしょうか?

1.主キー(重複がないならば、主キーでなくても可)

のデータを抽出し、それを配列に入れる。

(例えば、KeyArrayという配列など)

2.配列の要素数の範囲内で乱数を3つ発生させる

その3つを例えば、r1 , r2 , r3 の3つの変数に格納する

3.KeyArray(r1) , KeyArray(r2) , KeyArray(r3)

が、「ランダムに抽出した3件の」主キーということになる

4.3で抽出したキーのデータをアップデートする

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ