You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala Jooq编写含unnest数组匹配SQL的where条件实现求助

Scala JOOQ 对应WHERE条件实现方案

以下两种写法都可以完美匹配你给出的原生SQL效果:


写法1:直接使用unnest函数拼接

适配你原SQL的写法,和原生SQL结构完全一致:

import org.jooq.impl.DSL.{asterisk, unnest, field, name}

// 替换为你自己的数组参数,类型根据字段实际类型调整即可,比如Array[Int]、Array[String]
val matchArray: Array[String] = ???
val table = name("table")

val queryResult = dslContext
  .select(asterisk())
  .from(table)
  .where(
    field(name("value1")).in(unnest(matchArray)),
    field(name("value2")).in(unnest(matchArray))
  )
  .fetch()

写法2:使用any运算符兼容特殊方言

如果你的数据库方言对unnest支持不好,可以换用该写法,执行效率和最终效果和写法1完全一致:

import org.jooq.impl.DSL.{asterisk, any, field, name}

val matchArray: Array[String] = ???
val table = name("table")

val queryResult = dslContext
  .select(asterisk())
  .from(table)
  .where(
    field(name("value1")).eq(any(matchArray)),
    field(name("value2")).eq(any(matchArray))
  )
  .fetch()

优化建议

如果你已经通过JOOQ代码生成工具生成了对应表的实体类,直接用生成的常量替换上面的field(name("value1"))、name("table")即可,能获得编译期类型检查能力,避免运行时报错。

内容的提问来源于stack exchange,提问作者Abhishek Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 02:24:04