Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连接嵌套查询时选择要连接的字段_Java_Sql_Jooq - Fatal编程技术网

Java 连接嵌套查询时选择要连接的字段

Java 连接嵌套查询时选择要连接的字段,java,sql,jooq,Java,Sql,Jooq,我最近一直在迁移我的数据库,并且一直在将剩余的SQL查询转移到jooq。享受这一点的乐趣: private SelectQuery<?> getIdeasQuery() { Select<?> numComments = dslContext.select(DSL.count().as("comment_count"), COMMENT.IDEA_ID).from(COMMENT).groupBy(COMMENT.IDEA_ID); Select<?

我最近一直在迁移我的数据库,并且一直在将剩余的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();
}
private SelectQuery getIdeasQuery(){
选择numComments=dslContext.Select(DSL.count().as(“comment\u count”),comment.IDEA\u ID).from(comment.groupBy(comment.IDEA\u ID);
选择numLikes=dslContext.Select(DSL.count().as(“like_count”),USER_LIKES_IDEA.IDEA_ID)。from(USER_LIKES_IDEA.groupBy(USER_LIKES_IDEA.IDEA_ID);
返回上下文
.select(DSL.field(“comment\u count”).as(“num\u comments”))
.select(DSL.field(“like\u count”).as(“num\u likes”))
.选择(用户.显示名称)
.选择(用户.权限)
.select(IDEA.fields())
.from(IDEA.leftOuterJoin(numComments).on(COMMENT.IDEA\u ID.eq(IDEA.ID))
.leftOuterJoin(numLikes).on(用户\u喜欢\u IDEA.IDEA\u ID.eq(IDEA.ID))
.leftOuterJoin(USER.on(IDEA.USER\u ID.eq(USER.ID)))
.getQuery();
}
然后根据上下文,使用返回的查询附加附加修饰符(使用
addConditions()
addOrderBy()
addLimit()
等),然后执行

我遇到的问题是,这两个子选择查询没有被命名为联接的原始名称。这是正确的行为!然而,在jOOQ中,我很难找到如何指定要连接的子查询字段。我已经尝试按照StackOverflow answer中所述的方式重命名子查询,但是类型不适合我


有什么想法吗?

所以我找到了我认为目前的解决方案。然而,这似乎是一个解决办法。我在进行连接时给了子查询名称,并使用该名称指向字段。如果我的模式在将来发生更改,我认为这不会导致编译时错误

这是给感兴趣的人的:

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.asTable("com")).on(DSL.field("com.idea_id").eq(IDEA.ID))
                    .leftOuterJoin(numLikes.asTable("like")).on(DSL.field("like.idea_id").eq(IDEA.ID))
                    .leftOuterJoin(USER).on(IDEA.USER_ID.eq(USER.ID)))
          .getQuery();
}
private SelectQuery getIdeasQuery(){
选择numComments=dslContext.Select(DSL.count().as(“comment\u count”),comment.IDEA\u ID).from(comment.groupBy(comment.IDEA\u ID);
选择numLikes=dslContext.Select(DSL.count().as(“like_count”),USER_LIKES_IDEA.IDEA_ID)。from(USER_LIKES_IDEA.groupBy(USER_LIKES_IDEA.IDEA_ID);
返回上下文
.select(DSL.field(“comment\u count”).as(“num\u comments”))
.select(DSL.field(“like\u count”).as(“num\u likes”))
.选择(用户.显示名称)
.选择(用户.权限)
.select(IDEA.fields())
.from(IDEA.leftOuterJoin(numComments.asTable(“com”)).on(DSL.field(“com.IDEA\u id”).eq(IDEA.id))
.leftOuterJoin(numLikes.asTable(“like”).on(DSL.field(“like.idea_id”).eq(idea.id))
.leftOuterJoin(USER.on(IDEA.USER\u ID.eq(USER.ID)))
.getQuery();
}