【发布时间】:2019-01-16 03:24:59
【问题描述】:
我想将此 SQL 查询转换为 JOOQ DSL。
select "p".*, array_agg("pmu") as projectmemberusers
from "Projects" as "p"
join "ProjectMemberUsers" as "pmu" on "pmu"."projectId" = "p"."id"
group by "p"."id";
目前我已经尝试使用 JOOQ 做这样的事情:
val p = PROJECTS.`as`("p")
val pmu = PROJECTMEMBERUSERS.`as`("pmu")
val query = db.select(p.asterisk(), DSL.arrayAgg(pmu))
.from(p.join(pmu).on(p.ID.eq(pmu.PROJECTID)))
.groupBy(p.ID)
这不起作用,因为 DSL.arrayAgg 需要 Field<T> 类型的东西作为输入。
我是 JOOQ 的新手,不是 SQL 专业人士。非常感谢详细的解释和改进建议。
【问题讨论】:
-
坦率地说,我不明白原始查询是如何工作的。
array_agg()应该收到一个列,并且您正在向它传递一个表别名。我错过了什么? -
嗯,这个查询实际上对我有用。也许看看这个blog.jooq.org/2017/01/12/…(页面底部“替代语法:PostgreSQL”)
-
@AlexeySoshin:您在投影中引用了一个表以在 PostgreSQL 中创建嵌套记录。
-
@LukasEder,是的,已经证实了这一点,尽管它在 PostgreSQL 中没有很好地记录。不过,我的假设是否正确,即 jOOQ 仍然不支持它?
-
@AlexeySoshin:没错,目前不支持。可以比较两个表
t1 = t2,但还不能投影它们。嵌套记录在 jOOQ 中仍处于试验阶段。
标签: sql postgresql kotlin jooq