0
我最近一直在迁移我的数据库并将其余的SQL查询移至jooq。有一些有趣的这一个:然后选择要在加入嵌套查询时加入的字段
private SelectQuery<?> getIdeasQuery() {
Select<?> numComments = dslContext.select(DSL.count().as("comment_count"), COMMENT.IDEA_ID).from(COMMENT).groupBy(COMMENT.IDEA_ID);
Select<?> numLikes = dslContext.select(DSL.count().as("like_count"), USER_LIKES_IDEA.IDEA_ID).from(USER_LIKES_IDEA).groupBy(USER_LIKES_IDEA.IDEA_ID);
return dslContext
.select(DSL.field("comment_count").as("num_comments"))
.select(DSL.field("like_count").as("num_likes"))
.select(USER.DISPLAY_NAME)
.select(USER.AUTHORITY)
.select(IDEA.fields())
.from(IDEA.leftOuterJoin(numComments).on(COMMENT.IDEA_ID.eq(IDEA.ID))
.leftOuterJoin(numLikes).on(USER_LIKES_IDEA.IDEA_ID.eq(IDEA.ID))
.leftOuterJoin(USER).on(IDEA.USER_ID.eq(USER.ID)))
.getQuery();
}
返回的查询被用来追加更多的修饰符(使用addConditions()
,addOrderBy()
,addLimit()
等)根据上下文,然后执行。
我遇到的问题是两个子选择查询没有被命名为它们的连接的原始名称。这是正确的行为!但是,在jOOQ中,我很难找到如何指定子查询的字段加入。我试着按照this StackOverflow的回答重新命名子查询的路线,但是这些类型并不适合我。
任何想法?