可用版本: Dev (3.21) | 最新版 (3.20) | 3.19 | 3.18 | 3.17

可选的列表达式

适用于 ✅ 开源版   ✅ 专业版   ✅ 企业版

创建动态 SQL 查询的一个关键能力是能够提供可选的列表达式。例如,假设您有一个条件,根据该条件您想要添加一个 ORDER BY 子句和一个 LIMIT 子句。您可以使用 DSL.noField() 来实现。

boolean condition = ...

create.select(BOOK.ID)
      .from(BOOK)
      .orderBy(condition ? BOOK.ID : noField())
      .limit(condition ? val(10) : noField(INTEGER))
      .fetch();

上述查询产生

-- If condition is true
SELECT book.id FROM book ORDER BY book.id LIMIT 10

-- If condition is false
SELECT book.id FROM book

在不投影列的子句中,noField() 表达式将被忽略。如果这意味着子句为空,那么整个子句将被省略。这不适用于投影 Record 类型的子句,包括 SELECT 子句行值表达式,或嵌套记录,以及函数调用,在这种情况下将投影 NULL 值。

使用 noField() 作为条件表达式,例如通过使用 DSL.condition(noField()) 包装它将产生一个 DSL.noCondition()

noField() 表达式仅在 DSL API 中受支持,而不在 模型 API 中受支持,在模型 API 中 noField() 的行为未定义。

反馈

您对此页面有任何反馈吗? 我们很乐意听取您的意见!

The jOOQ Logo