【问题标题】:Can't find correct way to select data in a CommonTableExpression with jOOQ找不到使用 jOOQ 在 CommonTableExpression 中选择数据的正确方法
【发布时间】:2020-03-28 17:26:59
【问题描述】:

我正在使用 jOOQ CommonTableExpression 从表中获取不同周末日期的列表。它是使用多个 cte 的较大查询中最短的 cte。我有查询在 postgres 中工作,但在 jOOQ 中没有正确。

根据 WITH 的 jOOQ 手册页:

    // Code for creating a CommonTableExpression instance
    name("t1").fields("f1", "f2").as(select(val(1), val("a")));

我试过了:

    import org.jooq.DSL.select;

    MyLog lg = MY_LOG.as("lg"); // a table generated by jOOQ.

    CommonTableExpression cteWkend = name("cteWkend")
            .fields("wkend")
            .as(select((lg.WKEND)).distinctOn(lg.WKEND).from(lg).fetch());

我从 IntelliJ 收到此错误:

DerivedColumnList1 中的 Select 不能应用于 org.jooq.Result>

看起来问题出在 .as(select ...) 之内,而且我在 (select ...) 和 .as() 之间的类型不匹配,这期待一些不同的东西。

搜索让我回到了引用的 jOOQ WITH 手册页,它给出了一个相当简单的例子。我无法找到一个重要的例子来告诉我应该去那里,我做错了什么或为什么错了。

有人可以在这里为我指出正确的方向吗?

【问题讨论】:

    标签: java sql common-table-expression jooq


    【解决方案1】:

    在此处删除此fetch() 电话:

    CommonTableExpression cteWkend = name("cteWkend")
            .fields("wkend")
            .as(select((lg.WKEND)).distinctOn(lg.WKEND).from(lg) /* .fetch() */);
    

    您不希望在将结果传递给公用表表达式之前执行公用表表达式中的子查询

    【讨论】:

    • 啊,有道理。我发现我已将最后一行中的 .distinctOn 调用更改为:.as(selectDistinct(lg.WKEND).from(lg) )
    猜你喜欢
    • 2021-04-30
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多