You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用JOOQ DSL API实现基于VALUES()的表关联

用jOOQ生成目标SQL的解决方案

大家好,跟大家分享下我这段时间用jOOQ生成SQL的经历:

  • 之前我在平台上提过类似问题,想搞清楚怎么用jOOQ生成特定的SQL语句
  • 过去两天我已经完成了99%的开发工作,但中途遇到了新的问题,考虑到原方案没法解决最初的问题,我干脆删了原问题,重新开了这个新问题,没去修改原问题

更新:多亏jOOQ的大佬Lukas Eder提醒,我才发现之前生成的SQL语句其实是合法的!所以现在把这个问题转为解决方案分享给大家。

目标SQL语句

SELECT 
    a.id,
    b.name,
    COUNT(c.id) AS total
FROM table_a a
JOIN table_b b ON a.b_id = b.id
LEFT JOIN table_c c ON a.id = c.a_id
WHERE a.status = 'ENABLED'
GROUP BY a.id, b.name
HAVING COUNT(c.id) > 0
ORDER BY total DESC

对应的jOOQ实现代码

// 假设已初始化DSLContext实例为dsl
Result<Record3<Long, String, Integer>> result = dsl.select(
            TABLE_A.ID,
            TABLE_B.NAME,
            DSL.count(TABLE_C.ID).as("total")
        )
        .from(TABLE_A)
        .join(TABLE_B).on(TABLE_A.B_ID.eq(TABLE_B.ID))
        .leftJoin(TABLE_C).on(TABLE_A.ID.eq(TABLE_C.A_ID))
        .where(TABLE_A.STATUS.eq("ENABLED"))
        .groupBy(TABLE_A.ID, TABLE_B.NAME)
        .having(DSL.count(TABLE_C.ID).gt(0))
        .orderBy(DSL.field("total").desc())
        .fetch();

如果大家在jOOQ生成SQL时遇到类似“怀疑SQL合法性”的问题,不妨先对照官方文档逻辑或者请教社区大佬确认,有时候只是自己想多啦😉


内容的提问来源于stack exchange,提问作者lumo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:47:33