PostgreSQL:如何使用另一个表随机条目的字段值更新表的一个字段

时间:2012-08-30 08:47:37

标签: sql postgresql

我有一个地址簿表和一个包含大量随机名称的表(random_names)。我想用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;

这基本上有效,但我并没有真正得到随机名称。当然我得到一个随机名称,但每个条目都使用相同的单个随机条目进行更新。

1 个答案:

答案 0 :(得分: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是否会评估每一行的子查询,但不能尝试。