通过将表的特定分区与另一个表连接来进行查询将返回部分字段

问题描述 投票:1回答:1

在执行下面的语句时,结果记录只有表B的字段,但如果我用select(A.fields())替换select()。select(B.fields()),我得到A和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()
java jooq
1个回答
0
投票

这是jOOQ中的一个错误,原因是普通的SQL表与非纯SQL表混合在一起。 jOOQ应生成SELECT *查询(因为纯SQL表的列对于jOOQ是未知的)。相关问题是:https://github.com/jOOQ/jOOQ/issues/7231

Workarounds:

  • 明确选择所有列(如您在问题中所提到的),例如通过: .select(A.fields()).select(B.fields())
  • 确保FROM子句中的所有表都是纯SQL表: .from("{0} partition (p2)", A").join("{0}", B).on(...)
© www.soinside.com 2019 - 2024. All rights reserved.