【发布时间】:2015-02-03 00:12:19
【问题描述】:
我有一个查询,用字符串表示:
final String q = "select 1 union select 2 union select 3";
此字符串来自外部来源(配置),因此它是一个字符串。在实际场景中,查询当然更有意义。
我想将此查询作为 jOOQ 类型安全查询中的子查询执行。以下工作,但它不是我真正想要的:
System.out.println(<context>.select().from(DSL.table("person")).where(DSL.field("identifier").in(
<context>.fetch(q).intoArray(0)
)).fetch());
这里的问题是我实际上是在执行两个查询。这会引入开销。
是否可以将字符串查询作为真正的子查询来执行?我必须以某种方式将字符串查询转换为 Select<Record1> 实例(我猜),但我找不到如何做到这一点。
【问题讨论】:
-
这不会有什么不同;即使这是纯 jooq,也会执行一个子查询。
-
是的,但是子查询的中间结果不会被发送到客户端并返回到服务器(用于执行外部查询)。