可以在QueryDSL上使用Select更新吗?怎么样?

问题描述

我需要在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;

解决方法

您可以尝试使用派生表:

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

我从您的查询中删除了一些部分,但是您对解决方案有所了解。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...