我一直在玩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"
答案 0 :(得分:1)
"正常"为您的别名字段生成SQL的方法是您已经看到的方式。引用字段的方式,例如当放入ORDER BY
条款时。
"特殊"为别名字段生成SQL的方法是将它放在SELECT
子句中,即当它声明自己时。
所有QueryPart.toString()
实施都会生成"正常" SQL字符串。如果您明确要在SELECT
子句中生成字段声明,则可以直接使用jOOQ's rendering API:
println(
DSL.using(SQLDialect.ORACLE)
.renderContext()
.declareFields(true)
.render(b)
)