我需要使用「IN」謂詞進行查詢,但是,jOOQ將我的「IN」呈現爲「EXISTS」+ 2x嵌套選擇。 但是,在DB2上,「IN」更快(500ms vs 8s)。我如何強制jOOQ以與我通過DSL API描述相同的方式呈現我的「IN」謂詞?jOOQ - 呈現IN而不是EXIST
示例代碼:
try (Connection connection = DriverManager.getConnection("jdbc:h2:mem:")) {
Settings settings = new Settings().withRenderFormatted(true);
DSLContext ctx = DSL.using(connection, SQLDialect.SQL99, settings);
ctx
.createTable("FOOBAR")
.column("FOO", SQLDataType.INTEGER)
.column("BAR", SQLDataType.INTEGER)
.execute();
String sql = ctx
.select()
.from(DSL.tableByName("FOOBAR"))
.where(
DSL.row(DSL.fieldByName("FOO")).in(ctx
.select(DSL.fieldByName("BAR"))
.from(DSL.tableByName("FOOBAR"))
)
)
.getSQL();
System.out.println(sql);
}
結果:
select *
from "FOOBAR"
where exists (
select "alias_2"."alias_2_0"
from (
select "BAR"
from "FOOBAR"
) "alias_2"("alias_2_0")
where ("FOO") = ("alias_2"."alias_2_0")
)
您爲什麼不使用DB2方言? – 2015-02-06 13:54:09
爲什麼不包含在免費版本中? ;) – LoganMzz 2015-02-06 14:08:28
因爲我們的汗水和眼淚使得DB2集成工作必須得到回報! – 2015-02-06 16:19:44