【问题标题】:Select constant in JOOQ union在 JOOQ 联合中选择常量
【发布时间】:2017-01-21 09:58:11
【问题描述】:

我需要在 JOOQ 中做同样的事情。

SELECT
  name,
  'companyType' AS resultType
FROM company
UNION ALL
SELECT
  name,
  'userType' AS resultType
FROM "user";

我已经弄清楚如何在 JOOQ 中很好地执行 unionall,但我无法弄清楚如何在任何一个联合选择中为结果选择一个常量值。

【问题讨论】:

    标签: java sql jooq


    【解决方案1】:

    您正在寻找DSL.inline(),它正是用于此目的:

    inline("companyType").as("resultType")
    

    或者,完整的查询:

    using(configuration)
      .select(COMPANY.NAME, inline("companyType").as("resultType"))
      .from(COMPANY)
      .unionAll(
       select(USER.NAME, inline("userType").as("resultType"))
      .from(USER))
      .fetch();
    

    这两个例子都假设你有这个静态导入:

    import static org.jooq.impl.DSL.*;
    

    更多信息可以在这里找到:http://www.jooq.org/doc/latest/manual/sql-building/bind-values/inlined-parameters

    【讨论】:

    • 为什么不使用 DSL.val("companyType").as("resultType") 并获得绑定变量的好处?
    • @AmitGoldstein:那么,绑定变量究竟有什么好处,特别是在这种情况下? 1) OP 似乎不想要绑定值。看标题,上面写着 "constant",2) 在很多情况下,绑定值实际上是错误的选择。这个特殊的例子(联合鉴别器)就是其中之一。更多信息:blog.jooq.org/2017/09/28/…(查看第 10 项,谓词下推获取相关示例)或blog.jooq.org/2017/05/30/…
    • 这么棒的阅读,还有评论区,我学到了很多-谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    相关资源
    最近更新 更多