Mat*_*tel 7 sql postgresql scala jooq
我试图使用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 (????????)
Run Code Online (Sandbox Code Playgroud)
我的问题是我似乎无法表达我需要它的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
Run Code Online (Sandbox Code Playgroud)
有没有办法用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)
Run Code Online (Sandbox Code Playgroud)
非常感谢.
更新:我找到了一种方法来表达这种似乎通过回退到纯SQL的方式.但我仍然想知道是否有更好的方式来表达这一点.这作为选择:
.select((field(""""Alias".*"""), field(name(otherAlias, aColumn)).as(aAlias)):_*) -> I get Select "Alias".*, otherAlias.aColumn as aAlias
Run Code Online (Sandbox Code Playgroud)
假设您使用的是 jOOQ 3.11(添加了对不合格星号和合格星号的支持),您可以编写
alias.asterisk()
Run Code Online (Sandbox Code Playgroud)
或者甚至,使用jOOQ 的 scala 扩展
alias.*
Run Code Online (Sandbox Code Playgroud)
当使用代码生成器时,这尤其强大。