java - 在 jOOQ 的 SQL 查询中结合普通 SQL 和 DSL

标签 java sql jooq

我有一个复杂的普通 SQL 查询(带有子选择、多个联接、数据库特定功能),但我想使用 jOOQ 的 DSL 来生成例如order by 子句。

我想要实现的是:

DSL
    .using(datasource)
    .select("select column from table")
    .orderBy(DSL.fieldByName("column"))

jOOQ 可以转变为:

select * (select column from table) q order by q.column;

这可以做到吗?

最佳答案

你已经很接近了。以下是可能的:

DSL.using(datasource, dialect)
   .select()
   .from("(select column from table) t")
   .orderBy(DSL.field("t.column"));

您必须自己显式地包装(并且根据 SQL 方言,还可以重命名)您的派生表。

请注意,我正在使用 DSL.field() ,不是DSL.fieldByName() ,因为后者会生成区分大小写的引用。然后,您的普通 SQL 查询还必须生成区分大小写的引用。

关于java - 在 jOOQ 的 SQL 查询中结合普通 SQL 和 DSL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27169402/

相关文章:

gradle - 如果该任务是最新的,则跳过Gradle任务依赖项

java - JOOQ 和 TimescaleDB - 如何在 JOOQ 中实现基本的 time_bucket 语句

java - RSA 解密 - BadPaddingException : Data must start with zero

PHP - MYSQL 按日期对多个表排序

java - 如何将动态查询从 QueryDSL 转换为 JOOQ?

php - 哈希输出对 SQL 查询有危险吗?

mysql - 简化查询以获取行总和

java - 在 Scala 中实现具有原始类型的方法

java - 为什么在 wicket 模型中 Finalize 方法被调用 2 次

java - 仅将 Spring Boot WebMvcConfigurer 限制为指定路径