MySQL允许我运行以下查询:
SELECT SUM(IF(COLUMN1 > COLUMN2, COLUMN2, COLUMN1)), SUM(IF(COLUMN3 = 0,4 ,10)) FROM TABLE;
我如何在JOOQ
中执行此操作?
答案 0 :(得分:0)
我假设您指的是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.*;