0

アドレス帳テーブルと、ランダムな名前 (random_names) がたくさんあるテーブルがあります。addressbook テーブルの name フィールドを、random_names テーブルの last_name フィールドで更新したい - RANDOMLY。

私は試した。

UPDATE addressbook
SET "name"=sub.last_name
FROM (SELECT last_name, random() as rand
    FROM random_names 
    ORDER BY rand) sub
WHERE name <> sub.last_name;

これは基本的に機能しますが、実際にはランダムな名前は得られません。確かにランダムな名前を取得していますが、各エントリは同じ単一のランダムなエントリで更新されます。

4

1 に答える 1

0

割り当て後にサブクエリを試すことができます。

UPDATE  addressbook as ab
SET     "name" = 
        (
        SELECT  rn.last_name
        FROM    random_names rn
        WHERE   rn.last_name <> ab.last_name
        ORDER BY 
                random()
        LIMIT   1
        )

Postgres が各行のサブクエリを評価するかどうかはわかりませんが、試してみても損はありません。

于 2012-08-30T08:52:40.113 に答える