我最近遇到了以下问题:在jooq(版本3.1.0)中建立查询:
我想用order和limit约束构建delete语句。所以,我的目标是建立这样的东西:
DELETE FROM table ORDER BY field DESC LIMIT 1
(这是MySql语法)
但是我没有在结果删除查询对象中找到nesessary方法:
DSLContext context = createContext();
DeleteWhereStep delete = context.delete(createTable(table));
DeleteConditionStep whereStep = delete.where(condition);
whereStep.orderBy(...)//and no such method here
select语句中有所有nesessary方法,delete中没有。 是否可以在jooq中设置删除请求的顺序和限制?
答案 0 :(得分:1)
从jOOQ 3.2开始,这些类型的扩展目前尚未实现。有可能,#203可以在jOOQ 3.3中实现。
同时,您有两种选择:
即。写点如下:
context.execute("DELETE FROM {0} ORDER BY {1} DESC LIMIT 1",
createTable(table),
field);
我怀疑MySQL ORDER BY .. LIMIT
语句的DELETE
扩展只是糖:
DELETE FROM table t
WHERE t.id IN (
SELECT id FROM table
ORDER BY field LIMIT 1
)
或者使用jOOQ:
context.delete(TABLE)
.where(TABLE.ID.in(
select(TABLE.ID)
.from(TABLE)
.orderBy(TABLE.FIELD)
.limit(1)
))