使用 jooq 的子查询更新 postgres 中的 table 行

updating table rows in postgres using subquery with jooq

我想像这样执行和更新:

UPDATE dummy
SET customer=subquery.customer,
    address=subquery.address,
    partn=subquery.partn
FROM (SELECT address_id, customer, address, partn
      FROM  dummy) AS subquery
WHERE dummy.address_id=subquery.address_id;

取自这个答案:

我找到了 this 并想知道这是否可以自动转换为 jooq 流利语法。

什么是等效的 jooq 查询?具体来说,如何在引用子查询时执行外部?

假设您正在使用代码生成,请按如下方式进行:

Table<?> subquery = table(
  select(
    DUMMY.ADDRESS_ID,
    DUMMY.CUSTOMER,
    DUMMY.ADDRESS,
    DUMMY.PARTN
  )
  .from(DUMMY)
).as("subquery");

ctx.update(DUMMY)
   .set(DUMMY.CUSTOMER, subquery.field(DUMMY.CUSTOMER))
   .set(DUMMY.ADDRESS, subquery.field(DUMMY.ADDRESS))
   .set(DUMMY.PARTN, subquery.field(DUMMY.PARTN))
   .from(subquery)
   .where(DUMMY.ADDRESS_ID.eq(subquery.field(DUMMY.ADDRESS_ID)))
   .execute();

当然,查询是没有意义的,因为您只是要触摸每一行而不修改它,但是由于您从另一个答案复制了 SQL,我假设您的子查询是dummy table 真是另类。