【问题标题】:jOOQ: how can I view a field which has been aliased?jOOQ:如何查看已别名的字段?
【发布时间】:2015-06-06 13:55:00
【问题描述】:

我一直在玩 jOOQ(在 Scala 中),希望能回答(看似简单的)问题:如何查看已别名的字段?

希望下面的例子能说明我的问题:

import org.jooq.impl._
import org.jooq.impl.DSL._

val a = field("a", SQLDataType.DOUBLE)
val b = a.as("b")

// prints "b" 
println(b)

// however, I would like it to print a "b" as in
select(b)

编辑:

我发现@Lukas Eder 提供的答案不起作用的情况。以下案例的修改答案将不胜感激(欢呼):

val f = field("amount", SQLDataType.DOUBLE)
val p = field("partition", SQLDataType.INTEGER)
val o = field("order_by", SQLDataType.DATE)

// prints as expected
val r = coalesce(sum(f).over().partitionBy(p).orderBy(o), 0)

// coalesce(
//   sum(amount) over (partition by partition order by order_by asc), 
//   0)

val a = r.as("test")

// question mark instead of 0
println(
  DSL.using(SQLDialect.POSTGRES)
   .renderContext()
   .declareFields(true)
   .render(a)
)

//  coalesce(sum(amount) over (partition by partition order by order_by asc), ?) as "test"

【问题讨论】:

    标签: java scala jooq


    【解决方案1】:

    为别名字段生成 SQL 的“正常”方式就是您所看到的方式。引用字段的方式,例如当放入ORDER BY 子句时。

    为别名字段生成 SQL 的“例外”方式是将其放在 SELECT 子句中,即当它声明自己时。

    所有QueryPart.toString() 实现都会生成“正常”的SQL 字符串。如果你明确地想要在SELECT 子句中生成字段声明,你可以直接使用jOOQ's rendering API

    println(
      DSL.using(SQLDialect.ORACLE)
         .renderContext()
         .declareFields(true)
         .render(b)
    )
    

    【讨论】:

    • 谢谢卢卡斯 - 非常有帮助:)
    猜你喜欢
    • 1970-01-01
    • 2021-06-01
    • 2021-04-02
    • 2012-08-05
    • 2018-03-25
    • 2012-06-17
    • 2017-09-26
    • 1970-01-01
    • 2019-08-06
    相关资源
    最近更新 更多