我有这样的查询:
从技术上讲,可以在一个SQL请求中表达,但是 使用jooq,应用程序和数据库服务器之间将有一个值往返。
jooq.select(TABLE_A.FIELD_A, TABLE_A.FIELD_B).from(TABLE_A)
.where(TABLE_A.ID.eq(id))
.fetchOne().map(r ->
jooq.insertInto(AUDIT)
.columns(AUDIT.FIELD_A, AUDIT.FIELD_B)
.values(r.value1(), r.value2()).execute())
select field_a, field_b into @a, @b from TABLE where ID = ?;
insert into AUDIT (field_a, field_b) values(@a, @b);
这是一个演示查询。我对有助于编写的工具感兴趣,而不是针对特定查询的变通方法。
答案 0 :(得分:0)
jOOQ支持INSERT .. SELECT
。您不应该在两个语句之间进行客户端往返,而是写下来:
<强> SQL:强>
insert into AUDIT (FIELD_A, FIELD_B)
select FIELD_A, FIELD_B from TABLE where ID = ?;
<强>爪哇:强>
jooq.insertInto(AUDIT, AUDIT.FIELD_A, AUDIT.FIELD_B)
.select(DSL.select(TABLE.FIELD_A, TABLE.FIELD_B)
.from(TABLE)
.where(TABLE.ID.eq(id)))
.execute();