【问题标题】:How to generate SQL statement with LIMIT clause but without OFFSET clause in jOOQ?如何在jOOQ中生成带有LIMIT子句但没有OFFSET子句的SQL语句?
【发布时间】:2014-08-22 14:25:31
【问题描述】:

我正在尝试使用 jOOQ 生成以下 SQL 语句:

SELECT id, name
FROM students
ORDER BY id DESC
LIMIT 50;

使用 jOOQ 生成上述语句:

String sql = DSL.using(SQLDialect.POSTGRES).select(
  field("id"),
  field("name"))
  .from("students")
  .orderBy(field("id").desc())
  .limit(inline(50))
  .getSQL();

但我得到以下信息:

select id, name from students order by id desc limit 50 offset ?

如何删除OFFSET 子句?我知道我可以将偏移值指定为0,这与省略OFFSET子句相同,但是我想知道我是否可以将它从生成的SQL语句中完全删除。

谢谢。

【问题讨论】:

    标签: java sql postgresql jooq


    【解决方案1】:

    没错,jOOQ 3.4.2 目前为 PostgreSQL 渲染了一个 OFFSET 子句,无论它是否由用户通过 API 指定。这可能会得到改善。我为此创建了问题#3577

    目前,在这种情况下并没有真正“简单”的方法来更改生成的 SQL。您可以实现ExecuteListener,并修补生成的 SQL - 但您还必须摆脱绑定值。

    【讨论】:

    • 感谢您的回复。我暂时将0 分配给OFFSET 值。
    • @Alex:是的。通过使用inline(0),您还可以避免不必要的绑定值,在这种情况下。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-11
    • 1970-01-01
    • 2013-01-05
    • 2013-07-07
    • 2015-09-28
    • 1970-01-01
    相关资源
    最近更新 更多