Возможно обновление с помощью Select на QueryDSL? Как?

#java #mysql #jpa #querydsl

#java #mysql #jpa #querydsl

Вопрос:

Мне нужно запустить инструкцию update, аналогичную приведенной ниже в MySQL. Он обновляет значения в таблице на основе условий строк в той же таблице. Есть ли способ добиться этого в QueryDSL JPA (или даже в этом родном)?

 UPDATE items,
       (SELECT id, retail / wholesale AS markup, quantity FROM items)
       AS discounted
    SET items.retail = items.retail * 0.9
    WHERE discounted.markup >= 1.3
    AND discounted.quantity < 100
    AND items.id = discounted.id;
  

Ответ №1:

Вы можете попробовать использовать производную таблицу:

 UPDATE items
SET items.retail = items.retail * 0.9
WHERE
items.id in (SELECT id FROM (select * from items) discounted WHERE discounted.quantity < 100);
  

Я удалил несколько частей из вашего запроса, но вы поняли суть решения.

Комментарии:

1. Запрос, который я опубликовал, уже работает, я спросил, как это сделать с помощью QueryDSL JPA или библиотеки SQL.