我有一个复杂的普通 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/