1

我需要从数据表中选择和 Id,但其中的 Account 等于第一个子查询选择的 Account。那可能吗?我正在使用 generate_series 因为我需要用随机数据填充一个表,我尝试了下面的查询,但我得到了错误:

错误:缺少表“roter”的 FROM 子句条目

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;
4

1 回答 1

1

您可能需要横向连接:

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

笔记:

  • 我添加/修改了表别名以使查询更容易理解

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

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

于 2020-09-18T14:24:53.857 回答