使用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
相关产品推荐
相关产品推荐

