Я хотел бы выполнить и обновить примерно так:

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;

Взято из этого ответа: https://stackoverflow.com/a/6258586/411965

Я нашел это и поинтересовался, можно ли это автоматически преобразовать в синтаксис с плавным языком jooq.

Что такое эквивалентный запрос jooq? в частности, как мне выполнить внешнее при обращении к подзапросу?

1
oshai 3 Дек 2020 в 18:41

1 ответ

Лучший ответ

Предполагая, что вы используете генерацию кода, сделайте это так:

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 действительно что-то еще.

1
Lukas Eder 3 Дек 2020 в 22:46