Available in versions: Dev (3.21) | Latest (3.20) | 3.19 | 3.18 | 3.17

Tables as SelectField

Applies to ✅ Open Source Edition   ✅ Express Edition   ✅ Professional Edition   ✅ Enterprise Edition

An org.jooq.Table expression extends the org.jooq.SelectField type, and as such, can be used in the SELECT clause directly, as well as everywhere else a SelectField is accepted, e.g. in nested records. This is specifically useful for (generated) table references. The following shows how to project a nested org.jooq.TableRecord:

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

This plays very well together with implicit joins:

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

Behind the scenes, the implementation may either be native in dialects that support this kind of projection (e.g. PostgreSQL), or emulated using the usual nested records emulations.

Nesting tables using this syntax is different from using the TABLE.asterisk() syntax, which doesn't nest the table but flattens its fields into the surrounding projection.

Dialect support

This example using jOOQ:

select(BOOK).from(BOOK)

Translates to the following dialect specific expressions:

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, 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, H2, 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
Generated with jOOQ 3.21. Translate your own SQL on our website

Feedback

Do you have any feedback about this page? We'd love to hear it!

The jOOQ Logo