作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在 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 上以 Debug模式运行时,我看到一个错误,指出无法在第二个 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)
)
);
有人可以给我指出正确的方向吗?
最佳答案
就像在查询的纯 SQL 版本中一样,您的 cteCounts
不应包含 with(cteOne)
子句:
WITH
cteOne (columns...) AS (select...),
cteCounts (columns...) AS (select referencing cteOne, no "with cteOne" here...)
SELECT ...
FROM ...
删除它,您的查询应该没问题
关于java - 如何在 jOOQ 中的另一个 CTE 中重用一个 CTE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59232161/
我是一名优秀的程序员,十分优秀!