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