if条件

hrysbysz  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(236)

mysql允许我运行以下查询:

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

我怎么能在家里做这个 JOOQ ?

3gtaxfhh

3gtaxfhh1#

我猜你指的是mysql的 IF() jooq目前不支持这个函数,因为 if 是java中的保留关键字,因此对于该函数没有1:1Map到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();

请参阅jooq手册中关于 CASE 表达细节。
一如往常,这种静态导入意味着:

import static org.jooq.impl.DSL.*;

相关问题