将 UNNEST 与 jOOQ 一起使用

Posted

技术标签:

【中文标题】将 UNNEST 与 jOOQ 一起使用【英文标题】:Using UNNEST with jOOQ 【发布时间】:2016-06-03 23:11:55 【问题描述】:

我正在使用 PostgreSQL 9.4、Spring Boot 1.3.2 和 jOOQ 3.7。我想“jOOQify”以下查询

SELECT id FROM users WHERE username IN (SELECT * FROM UNNEST(?))

这样我就可以使用 Spring 的 JdbcTemplate 通过传递一个列表或数组(在本例中为 List<String>)来运行它。我试过了

DSLContext.select(
    USERS.ID
)
.from(
    USERS
)
.where(
    USERS.USERNAME.in(...)
)

但我不知道在... 中放置什么。我尝试了类似的东西

DSLContext.select(field("*")).from(unnest(myList))

但不幸的是编译器不喜欢这样。有什么简单的方法可以实现吗?

【问题讨论】:

你能传递一个数组吗? where username = ANY ( array ) 会工作 【参考方案1】:

编译器不喜欢你的尝试,因为USERS.USERNAMEField<String>,因此in() 方法需要Select<? extends Record1<String>>

你可以这样修复它:

select(field("*", String.class)).from(unnest(myList))

或者,也许更好一点:

select(field(name("v"), String.class)).from(unnest(myList).as("t", "v"))

【讨论】:

以上是关于将 UNNEST 与 jOOQ 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

具有多个数组的 unnest 的 Jooq 表示法

将 JooQ 与 SQL Server 一起使用,getTables() 方法返回服务器上所有数据库中的所有表

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

如何正确处理与 jooq 的连接?

Java JOOQ 与 SQL Server:缓存查询

JOOQ:用字符串获取表和列?