jOOQ支持查询本地结果吗?

时间:2015-01-29 08:00:30

标签: java sql jooq

假设您从数据库中提取了一些数据:

Record r = <DSLContext>.select()...fetch();

jOOQ是否支持对结果进行进一步的本地查询?

<DSLContext>.select(...).from(r).where(...)...fetch();

有时,基于对数据库的早期查询,本地查询结果是有意义的。

我在文档中找不到任何有用的东西,所以我猜答案是否定的。但是,无论如何,我在这里都要问它,为了确定性,可能会启动一些有关此功能的想法或讨论(虽然这不是SO的目的)。

1 个答案:

答案 0 :(得分:1)

如果您真的想再次往返数据库,那么是的,您可以使用org.jooq.Tableorg.jooq.Result创建新的DSL.table(Result)

select(...)
.from(DSL.table(result))
.where(...)
.fetch();

如果您的数据库支持,则使用SQL VALUES(...) constructor生成一个表,或者使用UNION ALL生成一个派生表,否则:

-- If database supports VALUES()
SELECT ...
FROM (VALUES (1, 'a'),
             (2, 'b'),
             (3, 'c')) t(column1, column2)
WHERE ...

-- Otherwise
SELECT ...
FROM (SELECT 1 column1, 'a' column2 UNION ALL
      SELECT 2        , 'b'         UNION ALL
      SELECT 3        , 'c') t
WHERE ...

-- actual SQL may vary, of course

jOOQ 3.6:#4009的路线图中采用Record代替Result的替代版本。在此期间,您必须使用原始Result引用,或使用DSLContext.newResult(...)方法之一创建新实例。