我目前正在使用JOOQ DSL.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(..)
不接受RowN
(在这种情况下,返回类型为row(..)
。我当然可以手动创建行,但是必须有一个更好的选择,以便从多个表中创建一行。
是否有比手动创建两个表的行更好的解决方案?