java - Jooq 查询问题与案例

标签 java mysql jooq

我写了这个mysql查询并尝试将其转换为JOOQ查询但没有成功,这是mysql查询

SELECT `P`.`phone_number`, `A`.`emp_no`,   
SUM(CASE WHEN VCG.vid IN (
SELECT gv.vid FROM `grvas` gv JOIN gprs gr ON gr.id=gv.grid 
WHERE gr.id=G.id AND gv.stdate < '2011-08-15'  AND gv.enddate > '2011-09-14') 
THEN VCG.amount END) AS allow,
... etc...

如何将此查询转换为 JOOQ 查询?
谢谢,

最佳答案

这个:

SUM(
  CASE 
  WHEN VCG.vid IN (
    SELECT gv.vid 
    FROM `grvas` gv 
      JOIN gprs gr ON gr.id=gv.grid 
    WHERE gr.id=G.id 
      AND gv.stdate < '2011-08-15'  
      AND gv.enddate > '2011-09-14'
  ) 
  THEN VCG.amount 
  END
) AS allow

会翻译成这样:

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

// And then
sum(
  decode()
  .when(VCG.VID.in(
      select(GRVAS.VID)
      .from(GRVAS)
        .join(GPRS).on(GPRS.ID.eq(GRVAS.GRID))
      .where(GPRS.ID.eq(G.ID))
      .and(GRVAS.STDATE.lt(Date.valueOf("2011-08-15")))
      .and(GRVAS.ENDDATE.gt(Date.valueOf("2011-09-14")))
  )), VCG.AMOUNT)
).as("allow")

上面的示例在 IN 谓词的子查询中省略了表别名,以简化操作。当然,您也可以继续为所有这些表添加别名。

关于java - Jooq 查询问题与案例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14618406/

相关文章:

java - 检查约束或默认值的 ForceType

java - 如何从 Eclipse 导出为可运行的 JAR

java - 使用下划线作为分隔符在 Java 中拆分字符串

java - EventQueue 和 EventDispatch 错误

java - 如何修复 [1573451709.039][警告] : Timed out connecting to Chrome, 重试...同时使用 chrome 版本 78 和 chrome 驱动程序版本 78.0.3904.70

mysql - 在带有分区的mysql中进行排名顺序/十分位

MySQL 批量 INSERT .. ON DUPLICATE KEY UPDATE,同时指定各个列

MySQL - 两个表/外连接之间的匹配列

java - 如何让 JOOQ 在 IN 子句中使用数组

postgresql - 为什么 Jooq 代码生成与 PostGIS 中断?