Java Order By中的jOOQ子查询

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

我在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(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感谢提供背景感谢提供背景