在 PostgreSQL 中使用 generate_series 的另一个子查询中的子查询中的字段值

Use field value from a subquery in another subquery where whit generate_series in PostgreSQL

我需要从数据 table 中获取 select 和 Id,但帐户等于第一个子查询 select 编辑的帐户。那可能吗?我正在使用 generate_series 因为我需要用随机数据填充 table 我尝试了下面的查询但是我得到了错误:

ERROR: missing FROM-clause entry for table "roter"

select
    (select "Account" FROM "AccountSamples" WHERE gen=gen ORDER BY random() LIMIT 1) roter,
    (select "Id" from "data" WHERE "Account" = "roter"."Account" LIMIT 1 )
from generate_series(1, 100) gen;

您可能需要横向连接:

select s.*, d.*
from generate_series(1, 100) x(gen)
cross join lateral (
    select s."Account" as roter
    from "AccountSamples" s
    where x.gen = x.gen
    order by random() 
    limit 1
) s
cross join lateral (
    select "Id" 
    from "data" d
    where d."Account" = s.roter 
    limit 1 
) d

备注:

  • 我 added/modified table 别名使查询更容易理解

  • 在第一个子查询中,条件where x.gen = x.gen似乎没有意义;我把它留在了查询中(你 可能 试图生成熵来强制 Postgres 为每一行重新执行查询...)

  • 在第二个子查询中,limit没有order by是不好的做法(这不是stable,也不是随机的)