在jOOQ中,以后的CTE中会重新使用CTE。我正在尝试按年份和学校总结学生的完成记录。我正在使用jOOQ 3.11.2和postgres 9.4。
我有正常的SQL代码。但是在jOOQ中,我得到的返回值为空值。
这似乎与我在以后的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)
)
);
有人可以为此指出正确的方向吗?
答案 0 :(得分:0)
就像查询的普通SQL版本一样,您的cteCounts
不应包含with(cteOne)
子句:
WITH
cteOne (columns...) AS (select...),
cteCounts (columns...) AS (select referencing cteOne, no "with cteOne" here...)
SELECT ...
FROM ...
删除它,您的查询应该没问题