当前位置: 首页 > 知识库问答 >
问题:

jooq-执行字符串作为子查询

惠翰藻
2023-03-14

我有一个由字符串表示的查询:

final String q = "select 1 union select 2 union select 3";
    System.out.println(<context>.select().from(DSL.table("person")).where(DSL.field("identifier").in(
            <context>.fetch(q).intoArray(0)
    )).fetch());

这里的问题是,我实际上是在执行两个查询。这就引入了开销。

是否可以将string-query作为真正的子查询执行?不知何故,我必须将字符串查询转换为select 实例(我猜),但我找不到如何做到这一点。

共有1个答案

上官和惬
2023-03-14

在许多地方可以将select类型注入为纯SQL。例如:

<context>.select()
         .from(DSL.table("person"))
         .where(
             "identifier in ({0})", DSL.resultQuery(q)
         )
         .fetch();
<context>.select()
         .from(DSL.table("person"))
         .where(DSL.field("identifier").in(
             DSL.select().from("(" + q + ")")
         ))
         .fetch();

还有其他人。需要注意的重要一点是,通过使用普通SQL,您可以将自己的SQL字符串嵌入到具有枚举占位符的模板中

... {0} ... {1} ...
 类似资料:
  • 问题是如何使testowy变量作为字符串工作?

  • 我想对字符串执行子字符串操作。我有字符串<代码> 我尝试了finame=mainname。子字符串(0,mainname.lastIndexOf(“.”) 但我得到了<代码>

  • 问题内容: 有没有一种方法可以写一个sql查询来查找所有行,其中字段值是给定字符串的子字符串。 例子: 查询应该是这样的 这怎么可能? 如果不可能的话,那么我将不得不在Java中实现该行为。我正在使用jdbc:mysql驱动程序连接到数据库。 更新 您的解决方案工作 现在有点曲折。如果我们要检查字段的子字符串是否作为我们指定的字符串的子字符串出现。 问题答案: 如果在文本中找到之一或必须使用 没有

  • 问题 你需要搜索一个字符串,并返回匹配的起始位置或匹配值本身。 解决方案 有几种使用正则表达式的方法来实现这个功能。其中一些方法被称为 RegExp 模式或对象还有一些方法被称为 String 对象。 RegExp 对象 第一种方式是在 RegExp 模式或对象中调用 test 方法。test 方法返回一个布尔值: match = /sample/.test("Sample text") # =>

  • 问题 你想在一条消息中查找某个关键字第一次或最后一次出现的位置。 解决方案 分别使用 JavaScript 的 indexOf() 和 lastIndexOf() 方法查找字符串第一次和最后一次出现的位置。语法: string.indexOf searchstring, start message = "This is a test string. This has a repeat or two

  • GETRANGE key start end 返回key 中字符串值的子字符串,字符串的截取范围由start 和end 两个偏移量决定(包括start 和end 在内)。可以使用负值,字符串右面下标是从-1开始的。 注意返回值处理: 1: start>=length, 则返回空字符串 2: stop>=length,则截取至字符结尾 3: 如果start 所处位置在stop右边, 返回空字符串