【问题标题】:JOOQ : Creating subqueries using WITH clause (using plain SQL)JOOQ:使用 WITH 子句创建子查询(使用纯 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。如果有任何方法可以实现这一点,请提供帮助。提前致谢。

【问题讨论】:

    标签: java sql jooq with-statement


    【解决方案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
    猜你喜欢
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多