在 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,也不是随机的)
我需要从数据 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,也不是随机的)