Saya memiliki tabel user yang menyimpan informasi pengguna saya. Untuk setiap pengguna, saya ingin menghasilkan 5 nilai UUID acak.

Pikiran awal saya adalah pertanyaan berikut:

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

Masalahnya di sini adalah bahwa setiap pengguna sekarang memiliki yang sama 5 UUID acak.

Apakah mungkin membiarkan Postgres mengevaluasi gabungan silang random lagi untuk setiap pengguna?

edit

Postgres tidak mendukung memiliki banyak baris dalam klausa select. Misalnya, ini tidak berfungsi:

select gen_random_uuid(), (select gen_random_uuid() from generate_series(1, 5))
from generate_series(1, 5)
1
Dwain Kane 14 Maret 2017, 15:59

2 jawaban

Jawaban Terbaik
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
Clodoaldo Neto 14 Maret 2017, 13:24
select identifier, gen_random_uuid() from ( 
select       user.identifier,gs
from         user,generate_series(1, 5) gs )q1
0
LongBeard_Boldy 14 Maret 2017, 14:34