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

表作为SelectField

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

一个 org.jooq.Table 表达式扩展了 org.jooq.SelectField 类型,因此,它可以直接用在 SELECT 子句中,也可以用在任何接受 SelectField 的地方,例如 嵌套记录中。 这对于 (生成的)表引用特别有用。 下面展示了如何投影一个嵌套的 org.jooq.TableRecord

Result<Record2<AuthorRecord, BookRecord>> result =
create.select(AUTHOR, BOOK)
      .from(AUTHOR)
      .join(BOOK).on(AUTHOR.ID.eq(BOOK.AUTHOR_ID))
      .fetch();

这与 隐式连接配合得很好

Result<Record2<AuthorRecord, BookRecord>> result =
create.select(BOOK.author(), BOOK)
      .from(BOOK)
      .fetch();

在底层,实现可以是方言中的原生实现(例如 PostgreSQL),也可以使用常见的 嵌套记录模拟进行模拟。

使用此语法嵌套表与使用 TABLE.asterisk() 语法不同,后者不会嵌套表,而是将其字段展平到周围的投影中。

方言支持

此示例使用 jOOQ

select(BOOK).from(BOOK)

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

ASE, Access, SQLDataWarehouse, SQLServer, Sybase

SELECT BOOK.ID [BOOK__ID],
BOOK.AUTHOR_ID [BOOK__AUTHOR_ID],
BOOK.TITLE [BOOK__TITLE],
BOOK.PUBLISHED_IN [BOOK__PUBLISHED_IN],
BOOK.LANGUAGE_ID [BOOK__LANGUAGE_ID]
FROM BOOK

Aurora MySQL, BigQuery, MariaDB, MemSQL, MySQL, SQLite

SELECT BOOK.ID `BOOK__ID`,
BOOK.AUTHOR_ID `BOOK__AUTHOR_ID`,
BOOK.TITLE `BOOK__TITLE`,
BOOK.PUBLISHED_IN `BOOK__PUBLISHED_IN`,
BOOK.LANGUAGE_ID `BOOK__LANGUAGE_ID`
FROM BOOK

Aurora Postgres, CockroachDB, DuckDB, H2, Informix, Postgres, YugabyteDB

SELECT ROW (
  BOOK.ID,
  BOOK.AUTHOR_ID,
  BOOK.TITLE,
  BOOK.PUBLISHED_IN,
  BOOK.LANGUAGE_ID
) BOOK
FROM BOOK

ClickHouse

SELECT TUPLE (
  BOOK.ID,
  BOOK.AUTHOR_ID,
  BOOK.TITLE,
  BOOK.PUBLISHED_IN,
  BOOK.LANGUAGE_ID
) BOOK
FROM BOOK

Databricks

SELECT (
  coalesce(BOOK.ID),
  coalesce(BOOK.AUTHOR_ID),
  coalesce(BOOK.TITLE),
  coalesce(BOOK.PUBLISHED_IN),
  coalesce(BOOK.LANGUAGE_ID)
) BOOK
FROM BOOK

DB2, Derby, Exasol, Firebird, HSQLDB, Hana, Oracle, Redshift, Snowflake, Teradata, Trino, Vertica

SELECT BOOK.ID "BOOK__ID",
BOOK.AUTHOR_ID "BOOK__AUTHOR_ID",
BOOK.TITLE "BOOK__TITLE",
BOOK.PUBLISHED_IN "BOOK__PUBLISHED_IN",
BOOK.LANGUAGE_ID "BOOK__LANGUAGE_ID"
FROM BOOK
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

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

The jOOQ Logo