Java Order By中的jOOQ子查询
我在MySQL 8数据库上使用一个子查询,如下所示:Java Order By中的jOOQ子查询,java,mysql,jooq,Java,Mysql,Jooq,我在MySQL 8数据库上使用一个子查询,如下所示: select * from series order by (select max(competition.competition_date) from competition where competition.series_id = series.id) desc 但是我没有找到一种方法来和jOOQ一起做 我尝试了以下查询,但无法编译: dsl .selectFrom(SERIES) .orderBy
select * from series
order by (select max(competition.competition_date) from competition
where competition.series_id = series.id) desc
但是我没有找到一种方法来和jOOQ一起做
我尝试了以下查询,但无法编译:
dsl
.selectFrom(SERIES)
.orderBy(dsl.select(DSL.max(COMPETITION.COMPETITION_DATE))
.from(COMPETITION).where(COMPETITION.SERIES_ID.eq(SERIES.ID)).desc())
.fetch()
子查询是否不受支持?将子查询转换为字段工作:
dsl.selectFrom(SERIES)
.orderBy(DSL.field(dsl.select(DSL.max(COMPETITION.COMPETITION_DATE)).from(COMPETITION)
.where(COMPETITION.SERIES_ID.eq(SERIES.ID))).desc())
.fetch()
将子查询转换为字段工作:
dsl.selectFrom(SERIES)
.orderBy(DSL.field(dsl.select(DSL.max(COMPETITION.COMPETITION_DATE)).from(COMPETITION)
.where(COMPETITION.SERIES_ID.eq(SERIES.ID))).desc())
.fetch()
选择扩展字段
有一个挂起的特性请求,允许选择扩展字段。这似乎很诱人,因为jOOQ已经在某种程度上支持支持嵌套记录的方言
但我怀疑在这种情况下这是否真的是一个好主意,因为我所知道的任何数据库(即我尝试的数据库)都不支持投影多个列的标量子查询。可以在行值表达式谓词中使用这样的子查询,例如
a、 b在t中选择x,y
但这是另一回事,因为它仅限于谓词,而不是任意的列表达式。它已经通过各种重载在jOOQ中得到支持,例如
罗瓦,B.插入选择X,T.Y.fromT
选择扩展字段
这无疑是可取的,因为只投影一个T类型列的SELECT语句实际上是SQL中的字段,即标量子查询。但让Select扩展字段在Java中是不可能的。使用Java的泛型无法表达这一点。如果我们想这样做,我们必须重载Select类型本身并创建
Select1扩展Select
选择2扩展选择
等
在这种情况下,Select1可以是一个特例,扩展字段,而其他字段不会参与这样的类型层次结构。但为了实现这一点,我们必须按照每个投影度复制整个Select DSL API,即复制22次,这可能不值得。截至jOOQ 3.13,已经有了。这使得即使仅针对标量子查询(即Select1)也很难证明增强的合理性
使用和相关API
。虽然Select无法扩展字段,但我们可以接受SelectSelect扩展字段
有一个挂起的特性请求,允许选择扩展字段。这似乎很诱人,因为jOOQ已经在某种程度上支持支持嵌套记录的方言
但我怀疑在这种情况下这是否真的是一个好主意,因为我所知道的任何数据库(即我尝试的数据库)都不支持投影多个列的标量子查询。可以在行值表达式谓词中使用这样的子查询,例如
a、 b在t中选择x,y
但这是另一回事,因为它仅限于谓词,而不是任意的列表达式。它已经通过各种重载在jOOQ中得到支持,例如
罗瓦,B.插入选择X,T.Y.fromT
选择扩展字段
这无疑是可取的,因为只投影一个T类型列的SELECT语句实际上是SQL中的字段,即标量子查询。但让Select扩展字段在Java中是不可能的。使用Java的泛型无法表达这一点。如果我们想这样做,我们必须重载Select类型本身并创建
Select1扩展Select
选择2扩展选择
等
在这种情况下,Select1可以是一个特例,扩展字段,而其他字段不会参与这样的类型层次结构。但为了实现这一点,我们必须按照每个投影度复制整个Select DSL API,即复制22次,这可能不值得。截至jOOQ 3.13,已经有了。这使得即使仅针对标量子查询(即Select1)也很难证明增强的合理性
使用和相关API
。虽然Select无法扩展字段,但我们可以接受Select感谢提供背景感谢提供背景