问题描述
我需要从数据表中选择ID和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;
解决方法
您可能想要横向连接:
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
的{{1}}不是很好的做法(这既不稳定,也不是随机的)