执行以下语句时,结果记录仅包含表 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/