java - 通过连接表的特定分区与另一个表的查询返回部分字段

标签 java jooq

执行以下语句时,结果记录仅包含表 B 的字段,但是如果我将 select() 替换为 select(A.fields()).select(B.fields()) ,我会同时获得 A 和 B 的字段,这是预期的行为吗?我假设像进行常规连接一样获取所有字段。

DSL.using(configuration())
                .select()
                .from(DSL.table("{0} partition (p2)", A))
                .join(B)
                .on(A.ID.eq(B.A_ID))
                .where(A.ID.eq(uuid))
                .fetchOne()

最佳答案

这是 jOOQ 中的一个错误,是由于普通 SQL 表与非普通 SQL 表混合所致。 jOOQ 应该生成一个 SELECT * 查询(因为 jOOQ 不知道普通 SQL 表的列)。相关问题是: https://github.com/jOOQ/jOOQ/issues/7231

解决方法:

  • 显式选择所有列(正如您在问题中提到的),例如通过:

    .select(A.fields()).select(B.fields())
    
  • 确保 FROM 子句中的所有表都是普通 SQL 表:

    .from("{0} partition (p2)", A").join("{0}", B).on(...)
    

关于java - 通过连接表的特定分区与另一个表的查询返回部分字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49021862/

相关文章:

java - 如何在 Spring Boot 中使用 @NotEmpty 约束来验证 HTTP 请求正文?

java - 从 json 响应转换为对象时,ObjectMapper 获得额外空间

java - 初学者Q : optional arguments in Java

gradle - 如果该任务是最新的,则跳过Gradle任务依赖项

java - 如何处理JOOQ中的外键关系

mysql - JOOQ GenerationTool 不确定?

Java反射,改变父类(super class)中声明的字段的值

java - 安卓手机: How to simply open an application without installation (as it is already installed) using Appium

java - jOOQ - fetchAny 和 fetchOne 之间的区别

sql - 用于报告应用程序的动态 SQL