我正在尝试使用jOOQ动态构建查询。到目前为止,一切进展顺利,但现在我偶然发现了一个我似乎无法表达的案例。

这是我要生成的查询的简化版本:

Select alias.*, otherAlias.aColumn as aAlias
From table as alias
inner join otherTable as otherAlias
on alias.someColumn = otherAlias.someOtherColumn
Where otherAlias.someOtherColumn in (????????)

我的问题是我似乎无法表达 SELECT 部分的需求。如果我只使用:
.select() -> I get select *
.select(alias.fields()) -> I get Select *
.select((alias.fields() :+ field(name(otherAlias, aColumn)).as(aAlias)):_*) -> I get Select otherAlias.aColumn as aAlias

有没有办法用jOOQ来表达这一点?

该声明的其余部分似乎按预期工作。我目前在Scala中使用jOOQ 3.10.7并针对Postgres,目前我的陈述如下:
sql
   .select()
   .from(alias)
   .innerJoin(otherAlias)
   .on(field(name(alias, someColumn)).eq(field(name(otherAlias, someOtherColumn))))
.where(condition)

非常感谢。

更新:我找到了一种表达这种方式的方法,该方法似乎可以通过使用普通SQL来实现。但是我仍然想知道是否有更好的方式来表达这一点。这可以作为选择:
 .select((field(""""Alias".*"""), field(name(otherAlias, aColumn)).as(aAlias)):_*) -> I get Select "Alias".*, otherAlias.aColumn as aAlias

最佳答案

假设您正在使用jOOQ 3.11(添加了对unqualified asterisksqualified asterisks的支持),则只需编写

alias.asterisk()

甚至使用jOOQ's scala extensions

alias.*

使用代码生成器时,此功能特别强大。

10-07 15:30