【问题标题】:How to select from only one table in jOOQ using a query with a join?如何使用带有连接的查询从 jOOQ 中的一个表中进行选择?
【发布时间】:2012-12-14 00:13:16
【问题描述】:

我在 jOOQ 中有以下查询:

factory()
.select()
.from(PERSON)
.join(ENDUSER).on(ENDUSER.PERSON_FK.equal(PERSON.ID))
.where(ENDUSER.ID.equal(userId))
.fetchOne();

此查询返回给我一个记录,其中包含来自 PERSON 和 ENDUSER 的所有列,但我只想要来自 PERSON 的列(这就是我输入 .from(PERSON) 而不是 .from(PERSON, ENDUSER) 的原因)。 我知道这无关紧要,但我不希望返回不必要的字段。

【问题讨论】:

标签: java mysql jooq


【解决方案1】:

您可以通过Table.fields()方法访问PERSON中的字段:

factory()
.select(PERSON.fields()) // Or getFields() in jOOQ 2.x
.from(PERSON)
.join(ENDUSER)...

这和写作差不多

SELECT PERSON.*
FROM PERSON
JOIN ENDUSER ...

另一种选择是实际逐个列出人员的所有字段

【讨论】:

  • 感谢 Lukas,这正是我想要的!
【解决方案2】:

Lukas 的答案正是我想要的。您还可以使用into() 方法仅针对您关心的表(而不是通用的Record 类型)获取强类型响应对象:

PersonRecord record = factory()
  .select()
  .from(PERSON)
  .join(ENDUSER).on(ENDUSER.PERSON_FK.equal(PERSON.ID))
  .where(ENDUSER.ID.equal(userId))
  .fetchOne()
  .into(PERSON);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-26
    • 2012-06-11
    • 1970-01-01
    • 2012-10-15
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    相关资源
    最近更新 更多