如何解决在另一个子查询中使用子查询中的字段值,其中另一个子查询在PostgreSQL中为generate_series
我需要从数据表中选择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}}不是很好的做法(这既不稳定,也不是随机的)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。