在另一个子查询中使用子查询中的字段值,其中另一个子查询在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}}不是很好的做法(这既不稳定,也不是随机的)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...