В настоящее время я играю с 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(..)
в этом случае. Конечно, я мог бы создать строку вручную, но должен быть лучший вариант для создания строки из более чем одной таблицы.
Есть ли лучшее решение, чем созданиестрока из двух таблиц от руки?