我正在尝试使用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 asterisks和qualified asterisks的支持),则只需编写
alias.asterisk()
甚至使用jOOQ's scala extensions
alias.*
使用代码生成器时,此功能特别强大。