在jooq中构建有序和有限的删除请求

时间:2013-11-19 06:25:13

标签: java mysql sql jooq

我最近遇到了以下问题:在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中设置删除请求的顺序和限制?

1 个答案:

答案 0 :(得分:1)

从jOOQ 3.2开始,这些类型的扩展目前尚未实现。有可能,#203可以在jOOQ 3.3中实现。

同时,您有两种选择:

诉诸普通SQL

即。写点如下:

context.execute("DELETE FROM {0} ORDER BY {1} DESC LIMIT 1",
    createTable(table),
    field);

手动将SQL语句转换为等效的

我怀疑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)
       ))