0

我有一个地址簿表和一个包含很多随机名称(random_names)的表。我想用我的 random_names 表的 last_name 字段更新我的地址簿表名字段 - 随机。

我试过。

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 回答