Postgres - Evalute再次加入左侧的每一行

时间:2017-03-14 12:59:47

标签: postgresql join

我有一个表user,其中包含我的用户信息。对于每个用户,我想生成5个随机UUID值。

我最初的想法是以下查询:

select      user.identifier, random.identifier
from        user
cross join  (select gen_random_uuid() identifier from generate_series(1, 5)) random

这里的问题是每个用户现在都有相同的 5个随机UUID。

是否可以让Postgres再次为每个用户评估random交叉加入?

修改

Postgres doet不支持在select子句中包含多行。例如,这不起作用:

select gen_random_uuid(), (select gen_random_uuid() from generate_series(1, 5))
from generate_series(1, 5)

2 个答案:

答案 0 :(得分:0)

with u (identifier) as (values (1),(2))
select u.identifier, random.identifier
from
    u
    inner join lateral (
        select gen_random_uuid() as identifier, u.identifier as u_identifier
        from generate_series(1, 2)
    ) random on u_identifier = u.identifier
;
 identifier |              identifier              
------------+--------------------------------------
          1 | c266a1d9-ce87-4fd1-b1fb-d46601ed36d7
          1 | a6cef3ea-48e4-4463-8fab-f8f9dc0535dd
          2 | 3c80e12c-7fb1-4524-88e1-764dcd9049df
          2 | 9d12ae5d-f4be-4330-b78e-38843c440745

答案 1 :(得分:0)

select identifier, gen_random_uuid() from ( 
select       user.identifier,gs
from         user,generate_series(1, 5) gs )q1