可用版本:Dev (3.21) | 最新 (3.20) | 3.19 | 3.18 | 3.17 | 3.16 | 3.15 | 3.14 | 3.13 | 3.12 | 3.11

元组或行值表达式

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

根据 SQL 标准,行值表达式可以具有大于 1 的度。这通常用于 INSERT 语句中,其中 VALUES 行值构造器允许提供行值表达式作为 INSERT 数据的源。行值表达式也可以出现在其他各种地方。jOOQ 以记录/行的形式支持它们。jOOQ 的 DSL 允许构建高达 22 度的类型安全记录。也支持更高阶的行,但没有任何类型安全性。行类型建模如下

// The DSL provides overloaded row value expression constructor methods:
public static <T1>             Row1<T1>             row(T1 t1)                      { ... }
public static <T1, T2>         Row2<T1, T2>         row(T1 t1, T2 t2)               { ... }
public static <T1, T2, T3>     Row3<T1, T2, T3>     row(T1 t1, T2 t2, T3 t3)        { ... }
public static <T1, T2, T3, T4> Row4<T1, T2, T3, T4> row(T1 t1, T2 t2, T3 t3, T4 t4) { ... }

// [ ... idem for Row5, Row6, Row7, ..., Row22 ]

// Degrees of more than 22 are supported without type-safety
public static RowN row(Object... values) { ... }

在谓词中使用行值表达式

行值表达式与大多数其他 QueryParts 不兼容,但它们可以用作构建各种条件表达式的基础,例如

请参阅相关章节,了解有关如何在谓词中使用行值表达式的更多详细信息。

投影行值表达式

行值表达式可用于投影嵌套记录,这允许直接在 SQL 中对结构化数据进行强大的映射。

在 UPDATE 语句中使用行值表达式

UPDATE 语句也支持更新行值表达式,而不是更新单个列的变体。请参阅相关部分以获取更多详细信息

更高阶的行值表达式

jOOQ 选择显式支持高达 22 度,以匹配 Scala 的类型安全元组、函数和产品支持。但是,与 Scala 不同,jOOQ 还支持更高阶,而无需额外的类型安全性。

方言支持

此示例使用 jOOQ

row(BOOK.ID, BOOK.TITLE)

翻译成以下特定方言的表达式

ASE, Access, Aurora MySQL, Aurora Postgres, BigQuery, ClickHouse, CockroachDB, DB2, Derby, DuckDB, Exasol, Firebird, H2, HSQLDB, Hana, MariaDB, MemSQL, MySQL, Oracle, Postgres, Redshift, SQLDataWarehouse, SQLServer, SQLite, Snowflake, Sybase, Teradata, Trino, Vertica, YugabyteDB

(BOOK.ID, BOOK.TITLE)

Databricks

(
  coalesce(BOOK.ID),
  coalesce(BOOK.TITLE)
)

Informix

ROW (BOOK.ID, BOOK.TITLE)
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

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

The jOOQ Logo