JOOQ中的IF条件

时间:2018-01-02 12:26:27

标签: java mysql jooq

MySQL允许我运行以下查询:

SELECT SUM(IF(COLUMN1 > COLUMN2, COLUMN2, COLUMN1)), SUM(IF(COLUMN3 = 0,4 ,10)) FROM TABLE;

我如何在JOOQ中执行此操作?

1 个答案:

答案 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.*;