首页 > 解决方案 > 如何从 RowN 创建 DSL.rowField()?

问题描述

我目前正在玩 JOOQsDSL.arrayAgg(..)并希望查询所有查询的行PROJECTS,每个查询PROJECT的行都有一个嵌套的PROJECTMEMBERUSERS. 我必须USER为每个PROJECTMEMBERUSER. USER应该是与 相同的嵌套行的一部分PROJECTMEMBERUSER

以下是我想要的查询:

db.select(
      PROJECTS.asterisk(),
      DSL.arrayAggDistinct(DSL.rowField(row(*PROJECTMEMBERUSERS.fields() + USERS.fields()))).`as`("memberusers")
)
      .from(
          PROJECTS
              .join(PROJECTMEMBERUSERS).on(PROJECTS.ID.eq(PROJECTMEMBERUSERS.PROJECTID))
              .join(USERS).on(USERS.ID.eq(PROJECTMEMBERUSERS.USERID))
      )
      .groupBy(PROJECTS.ID)

然而DSL.rowField(row(*PROJECTMEMBERUSERS.fields() + USERS.fields()))这是不可能的,因为DSL.rowField(..)不接受RowNrow(..)在这种情况下的返回类型。我当然可以手动创建行,但必须有更好的选择从多个表中创建一行。

有没有比手动创建两个表的行更好的解决方案?

标签: sqlpostgresqlkotlinjooq

解决方案


推荐阅读