如何从RowN创建DSL.rowField()?

时间:2018-08-24 18:17:34

标签: sql postgresql kotlin jooq

我目前正在使用JOOQ DSL.arrayAgg(..),并想查询所有PROJECTS,其中每个查询的PROJECT行都有其PROJECTMEMBERUSERS的嵌套行。我必须为每个USER加入一个PROJECTMEMBERUSERUSER应该与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(..)不接受RowN(在这种情况下,返回类型为row(..)。我当然可以手动创建行,但是必须有一个更好的选择,以便从多个表中创建一行。

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

0 个答案:

没有答案