假设您从数据库中提取了一些数据:
Record r = <DSLContext>.select()...fetch();
jOOQ是否支持对结果进行进一步的本地查询?
<DSLContext>.select(...).from(r).where(...)...fetch();
有时,基于对数据库的早期查询,本地查询结果是有意义的。
我在文档中找不到任何有用的东西,所以我猜答案是否定的。但是,无论如何,我在这里都要问它,为了确定性,可能会启动一些有关此功能的想法或讨论(虽然这不是SO的目的)。
答案 0 :(得分:1)
如果您真的想再次往返数据库,那么是的,您可以使用org.jooq.Table
从org.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(...)
方法之一创建新实例。