Jooq ARRAY_AGG where 子句

Posted

技术标签:

【中文标题】Jooq ARRAY_AGG where 子句【英文标题】:Jooq ARRAY_AGG where clause 【发布时间】:2022-01-07 10:49:12 【问题描述】:

我有想要使用 scala Jooq 参数执行的查询。

select * from table where ("value1") in unnest(array) and ("value2") in unnest(array);

我可以将此部分转换为以下 jooq 参数,但我无法获得我需要为 where 子句做的事情。

dslContext.select(asterisk()).from(table).where(*)

【问题讨论】:

【参考方案1】:

目前 jOOQ 似乎不支持该特定语法,另请参阅此功能请求: https://github.com/jOOQ/jOOQ/issues/12330

如果您在 jOOQ 中缺少某个功能,您可以随时通过 plain SQL templating 扩展 jOOQ。在这种情况下:

def inUnnest[T](value: T, array: Field[Array[T]]): Condition = 
  inUnnest(DSL.value(value), array)

def inUnnest[T](value: Field[T], array: Field[Array[T]]): Condition =
  DSL.condition("0 in unnest (1)", value, array)

【讨论】:

以上是关于Jooq ARRAY_AGG where 子句的主要内容,如果未能解决你的问题,请参考以下文章

Knex:如何在 knex 中的有子句中编写 ARRAY_AGG?

JOOQ:使用 WITH 子句创建子查询(使用纯 SQL)

在 JOOQ 中使用 NOWAIT 和 SKIP LOCKED 子句的解决方法

动态创建 JOOQ 查询

JOOQ - 如何将 array_agg 与自定义类型字段一起使用

请教linq中orderby子句与where子句共存时排序失效问题