【问题标题】:jOOQ Dynamic Number of WITH ClausesjOOQ 动态 WITH 子句数
【发布时间】:2020-10-07 08:14:13
【问题描述】:

我正在玩 jOOQ 和嵌套查询。我有一个 JSON 有效负载,其中可能包含许多子查询。我想将这些子查询视为可变数量的公用表表达式(即 WITH 子句中的 CTE)。目前我有这个工作示例,但它包含的 CTE 数量是静态的。如何在 WITH 子句中完成可变数量的 CTE?

    /*
    +-----------------+
    |sum_of_everything|
    +-----------------+
    |              100|
    +-----------------+
     */
    Supplier<Stream<Map<String, Object>>> resultsWith =
        () ->
            dslContext
                .with("s1")
                .as(query)
                .select(sum(field("1", Integer.class)).as("sum_of_everything"))
                .from(table(name("s1")))
                .fetchStream()
                .map(Record::intoMap);

最终我需要反序列化 JSON 有效负载以确保 CTE 引用层次结构正常工作,并且在选择最终结果之前,我需要查看 jOOQ 是否支持在另一个 CTE 中引用一个 CTE。我需要完成这样的事情:


    /*
    +-----------------+
    |sum_of_everything|
    +-----------------+
    |              100|
    +-----------------+
     */
    Supplier<Stream<Map<String, Object>>> resultsWith =
        () ->
            dslContext
                .with("s1").as(query1)
                .with("s2").as(query2) // should be able to reference "s1" i.e. query1
                ...
                .with("sNMinus1").as(queryNMinus1)
                .with("sN").as(queryN) // should be able to reference any upstream CTE
                .select(sum(field("1", Integer.class)).as("sum_of_everything"))
                .from(table(name("sN")))
                .fetchStream()
                .map(Record::intoMap);

【问题讨论】:

    标签: java postgresql common-table-expression jooq


    【解决方案1】:

    您可以从Name 开始创建CommonTableExpression 实例,例如使用Name.as(Select)

    CommonTableExpression<?> s1 = name("s1").as(query1);
    CommonTableExpression<?> s2 = name("s2").as(query2);
    
    // And then (or, of course, use a Collection)
    dslContext.with(s1, s2, ..., SN)
    

    【讨论】:

      猜你喜欢
      • 2020-10-05
      • 2017-11-12
      • 1970-01-01
      • 2014-08-06
      • 2021-11-09
      • 2022-01-07
      • 1970-01-01
      • 2016-04-25
      • 2017-08-12
      相关资源
      最近更新 更多