sql - 在 JOOQ DSL 中使用带有连接别名的 PosgreSQL array_agg
问题描述
我想将此 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 专业人士。非常感谢详细的解释和改进建议。
解决方案
首先,语法确实有效,在 SQL Fiddle 中检查了这一点:http ://sqlfiddle.com/#!17/e45b7/3
但它没有详细记录:https ://www.postgresql.org/docs/9.5/static/functions-aggregate.html https://www.postgresql.org/docs/current/static/rowtypes.html#ROWTYPES-用法
这可能是 jOOQ 目前不支持此功能的原因:https ://github.com/jOOQ/jOOQ/blob/master/jOOQ/src/main/java/org/jooq/impl/DSL.java#L16856
当前唯一可以使用的语法是使用单个字段:DSL.arrayAgg(pmu.field(1))
推荐阅读
- html - 没有换行的多个文本标签
- python-3.x - 深度 Q 学习在算法交易中表现不佳
- ubuntu - 火狐坚持显示服务器IP而不是域名
- swift - Sync 不同步并且无法将数组填充到 DispatchQueue
- html - 如果我使用填充可用,则无法使用百分比高度
- regex - 寻找匹配特定单词和数字范围的正则表达式
- python - 使用 python 线程打开多个文件
- 3d - 我可以用更简单的模型和良好的图像导出 speedtree 树吗?
- c - 使用 fork 在 C 中创建多个子进程
- web-crawler - 我可以在 Stormcrawler 中按锚点或标题过滤外链吗?