Postgres - Lateral join with random values on both sides
Your problem is that you are assigning the person
uuid in the outermost select
. So, you get one for each row.
My first thought is a bit more complicated:
with p as ( select gen_random_uuid() as person, g.i from generate_series(1, 2) g(i) ), u as ( select gen_random_uuid() as utility, g.i from generate_series(1, 6) g(i) )select p.person, u.utilityfrom p join u on mod(p.i, 2) = mod(u.i, 2);
Admittedly, a lateral join is simpler, but a similar idea can be used:
with p as ( select gen_random_uuid() as person, g.i from generate_series(1, 2) g(i) )select p.person, u.utilityfrom p, lateral (select gen_random_uuid() as utility from generate_series(1, 3) ) u;
Or, without a lateral join at all:
with p as ( select gen_random_uuid() as person, g.i from generate_series(1, 2) g(i) )select p.person, gen_random_uuid() as utilityfrom p cross join generate_series(1, 3);
Here is example (I use md5
instead of gen_random_uuid
, but same idea):
t=# with person as (select md5(random()::text) from generate_series(1,2,1)), utility as (select md5(random()::text) from generate_series(1,3,1))select person.md5, utility.md5from personjoin utility on true; md5 | md5----------------------------------+---------------------------------- 74df2447c58a1595e0a8458d1142e2e0 | 3703e2004a1494e6dd74cd51f4dd029e 74df2447c58a1595e0a8458d1142e2e0 | a1f7d74adc1ff3a49533204071e00f82 74df2447c58a1595e0a8458d1142e2e0 | 4f32029c29eee254d9c97045d06bcdf5 48a56953721f04752b325c332e26a5ed | 3703e2004a1494e6dd74cd51f4dd029e 48a56953721f04752b325c332e26a5ed | a1f7d74adc1ff3a49533204071e00f82 48a56953721f04752b325c332e26a5ed | 4f32029c29eee254d9c97045d06bcdf5(6 rows)
I made it based on
I need 2 random persons with each 3 random utlities
not on previous statements
select *from ( select gen_random_uuid() as person from generate_series(1,2) ) p inner join lateral ( select gen_random_uuid() as utility, p.person from generate_series(1,3) ) u using (person); person | utility --------------------------------------+-------------------------------------- d8655c1d-5051-4f5c-929e-efb92a2e6a93 | 1524b662-f2a3-4bfa-bc47-71b96a8e6121 d8655c1d-5051-4f5c-929e-efb92a2e6a93 | e38190f4-bf36-49f9-92c0-11fa18113aad d8655c1d-5051-4f5c-929e-efb92a2e6a93 | 799a9e39-f954-4d35-8b9a-1fe444d91ccf 3f581430-75be-4c07-aff1-e1c2c802b463 | 3261f4f9-4c28-4709-9b38-cf3ce287317e 3f581430-75be-4c07-aff1-e1c2c802b463 | f9bbadaf-7c68-48f2-bb9b-d57e2902e3f1 3f581430-75be-4c07-aff1-e1c2c802b463 | 158b8e0d-5b22-4f4d-8052-589aaa224b2e