JOOQ:使用 WITH 子句创建子查询(使用纯 SQL)
Posted
技术标签:
【中文标题】JOOQ:使用 WITH 子句创建子查询(使用纯 SQL)【英文标题】:JOOQ : Creating subqueries using WITH clause (using plain SQL) 【发布时间】:2021-11-09 20:30:08 【问题描述】:我在使用带有“普通 SQL 查询”的“WITH”子句生成子查询时遇到问题。用例是我有一个 SQL,我只想将它用作 with 子查询并在此基础上创建一个查询。
例子:
我有疑问:
"SELECT a,b,c FROM T"
我要创作:
WITH "t1" as ( SELECT a,b,c FROM T )
SELECT a,b FROM "t1";
我正在尝试使用 DSL.with(...) 但它只需要 SelectStep 或 CTE。我还注意到我们无法使用纯 SQL 创建 CTE。如果有任何方法可以实现这一点,请提供帮助。提前致谢。
【问题讨论】:
【参考方案1】:从 jOOQ 3.15 开始,WithAsStep.as()
方法将ResultQuery
作为参数,而不仅仅是Select
。这意味着您可以包装 DSL.resultQuery(String)
(即 "plain SQL template")。随便写:
ctx.with(name("t1"))
.as(resultQuery("SELECT a, b, c FROM t"))
.select(field(unquotedName("a")), field(unquotedName("b")))
.from(name("t1"))
.fetch();
假设一如既往,这个静态导入:
import static org.jooq.impl.DSL.*;
【讨论】:
感谢@Lukas,我看到它是最近添加的,在旧版本(如果有的话)中实现这一目标的其他方法是什么? @tolani:是什么阻止了你升级? 没什么,升级了@Lukas以上是关于JOOQ:使用 WITH 子句创建子查询(使用纯 SQL)的主要内容,如果未能解决你的问题,请参考以下文章
使用 peewee 创建子查询,在子查询结果上使用 `.select`