2017-03-14 44 views
1

我有一個表user它擁有我的用戶信息。對於每個用戶,我想生成5個隨機的UUID值。Postgres - Evalute再次加入左邊的每一行

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

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) 
+0

不是100%肯定,如果PG支持這一點,但應該做一個SELECT user.identifier,(從generate_series選擇gen_random_uuid()(1,5) )作爲用戶的標識符應該完成這項工作。 – gorefest

+0

@gorefest查看更新! Postgres不支持這個功能。 –

+0

等一下,不該做這個工作嗎?從用戶 – gorefest

回答

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 
+0

LATERAL JOIN,有趣的是,我不知道這樣的聯接存在。聰明的解決方案,謝謝。 –

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

也是很好的解決方案。對不起,我必須選擇一個解決方案,並喜歡側向連接的聰明。 –