JOOQ中的IF条件

问题描述 投票:1回答:1

MySQL允许我运行以下查询:

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

我怎样才能在JOOQ做到这一点?

java mysql jooq
1个回答
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.*;
© www.soinside.com 2019 - 2024. All rights reserved.