MySQL允许我运行以下查询:
SELECT SUM(IF(COLUMN1 > COLUMN2, COLUMN2, COLUMN1)), SUM(IF(COLUMN3 = 0,4 ,10)) FROM TABLE;
我怎样才能在JOOQ
做到这一点?
我假设你指的是MySQL的IF()
函数,目前jOOQ不支持,因为if
是Java中的保留关键字,所以没有1:1映射到Java函数的这个函数。
但正如您在MySQL的文档中也可以看到的那样,您可以非常轻松地将IF()
重写为更标准的CASE
表达式。所以,你的查询将是SQL中的这个:
SELECT
SUM (CASE WHEN COLUMN1 > COLUMN2 THEN COLUMN2 ELSE COLUMN1 END),
SUM (CASE WHEN COLUMN3 = 0 THEN 4 ELSE 10 END)
FROM TABLE
这转换为jOOQ如下:
using(configuration)
.select(sum(when(TABLE.COLUMN1.gt(TABLE.COLUMN2), TABLE.COLUMN2)
.otherwise(TABLE.COLUMN1)),
sum(when(TABLE.COLUMN3.eq(0), 4).otherwise(10)))
.from(TABLE)
.fetch();
See the jOOQ manual's section about the CASE
expression for details。
与往常一样,这意味着静态导入:
import static org.jooq.impl.DSL.*;