【问题标题】:How to do GROUP BY with CASE in jOOQ?如何在 jOOQ 中使用 CASE 进行 GROUP BY?
【发布时间】:2022-10-06 20:20:55
【问题描述】:

我有这样的查询:

SELECT bm.name
FROM parent bm
ORDER BY CASE WHEN EXISTS
    (SELECT 1 FROM children bl 
              WHERE bl.user_id = \'d012345e-22sc-44e5-ade7-ffdce74af05e\' 
                AND bl.parent_id=bm.parent_id)
    THEN 1 END;

我尝试从另一个表中过滤具有特定值的数据并且它工作正常,但我不明白如何在 jOOQ 中执行此操作。

  • 只需将您的查询用作native
  • 你具体在纠结什么? CASE? EXISTS 子查询?我的意思是,所有 SQL 都以 1:1 的比例转换为 jOOQ,但也许,你会遇到一个具体的问题?

标签: java postgresql jooq


【解决方案1】:

我不知道你到底在挣扎什么,但请记住,你在 jOOQ 中尝试做的一切几乎总是可以从 SQL 1:1 翻译。如果您对此感到困扰,可以随时使用online translation service to translate SQL to jOOQ (Java)

我假设,您遇到的问题与以下任一有关:

假设您使用的是the code generator。你有通常的静态导入(i.n.import static org.jooq.impl.DSL.*;),写:

Parent bm = PARENT.as("bm");
Children bl = CHILDREN.as("bl");

ctx.select(bm.NAME)
   .from(bm)
   .orderBy(when(
       exists(
           selectOne()
           .from(bl)
           .where(bl.USER_ID.eq("d012345e-22sc-44e5-ade7-ffdce74af05e"))
           .and(bl.PARENT_ID.eq(bm.PARENT_ID))
       ),
       1
   ))
   .fetch();

【讨论】:

    猜你喜欢
    • 2014-03-11
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-22
    • 2021-01-21
    • 2020-12-14
    相关资源
    最近更新 更多