首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Jooq查询案例问题

Jooq查询案例问题
EN

Stack Overflow用户
提问于 2013-01-31 12:18:31
回答 2查看 1K关注 0票数 2

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

代码语言:javascript
复制
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查询?

谢谢,

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-01-31 19:15:38

这一点:

代码语言:javascript
复制
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

会转化成这样:

代码语言:javascript
复制
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谓词的子查询中的表别名,以简化操作。当然,您也可以继续为所有这些表设置别名。

票数 4
EN

Stack Overflow用户

发布于 2013-01-31 17:59:18

我找不到一种合适的方法将上面的sql转换成JOOQ,但我使用了

代码语言:javascript
复制
String sql="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... " ;
Result<Record> res = f.fetch(sql);  

这个工作做得很好,谢谢

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14618406

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档