【发布时间】:2020-04-01 13:40:29
【问题描述】:
在 jOOQ 中,我在以后的 CTE 中重新使用了 CTE。我正在尝试按年份和学校汇总学生完成记录。我正在使用 jOOQ 3.11.2 和 postgres 9.4。
我有工作的 SQL 代码。但是在 jOOQ 中,我返回了 null 值。
这似乎是我如何在以后的 CTE 中重复使用一个 CTE 的问题。
一开始我以为是count()的使用有问题。从手册来看,count() 的使用似乎是正确的。作为测试,我删除了查询中对 count() 的所有引用,但仍然得到相同的错误。
我找不到在 jOOQ 中重用或链接 CTE 的示例。在 SQL 中很简单,如下所示:SQL - Use a reference of a CTE to another CTE 但我在 jOOQ 中没有掌握它的窍门。
在 Intellij 上以调试模式运行时,我看到一个错误,即无法在第二个 CTE 中评估 select() 语句。
Cannot evaluate org.jooq.impl.SelectImpl.toString()
这是一个显示我在做什么的最小示例。
CommonTableExpression<Record4<String, String, String, Year>> cteOne = name("CteOne")
.fields("SCHOOL","STUDENT_NAME", "COURSE_COMPLETED", "YEAR_COMPLETED")
.as(
select( a.NAME.as("SCHOOL")
, a.STUDENT_NAME
, a.COURSE_DESCRIPTION.as("courseCompleted"),
, a.YEAR_COMPLETED
)
.from(a)
.orderBy(a.YEAR_COMPLETED)
);
CommonTableExpression<Record3<String, Year, Integer >> cteCounts = name("cteCounts")
.fields("SCHOOL", "YEAR_COMPLETED", "NUM_COMPLETED" )
.as( with(cteOne)
.select(
, field(name("cteOne","SCHOOL"), String.class)
, field(name("cteOne","YEAR_COMPLETED"), Year.class)
, count().as("NUM_COMPS_LOGGED")
)
.from(cteOne)
.groupBy(
field(name("cteCompsList","YEAR_COMPLETED"), Year.class)
, field(name("cteOne","SCHOOL"), String.class)
)
.orderBy(
field(name("cteCompsList","YEAR_COMPLETED"), Year.class)
, field(name("cteOne","SCHOOL"), String.class)
)
);
有人可以指出我正确的方向吗?
【问题讨论】:
标签: java sql common-table-expression jooq