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

量化比较谓词

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

如果比较谓词的右侧是一个非标量表子查询,您可以将该子查询包装在量词中,例如 ALLANYSOME。 请注意,SQL 标准将 ANYSOME 定义为等效。 jOOQ 选择了更直观的 ANY 并且不支持 SOME。 以下是一些 jOOQ 支持的示例

TITLE = ANY('Animal Farm', '1982')
PUBLISHED_IN > ALL(1920, 1940)
BOOK.TITLE.eq(any("Animal Farm", "1982"));
BOOK.PUBLISHED_IN.gt(all(1920, 1940));

对于示例,量化比较谓词的右侧填充了参数列表。 但很容易想象值的来源来自子选择

ANY 和 IN 谓词

有趣的是,SQL 标准根据 ANY 量化谓词定义了 IN 谓词。 以下两个表达式是等效的

[ROW VALUE EXPRESSION] IN [IN PREDICATE VALUE]
[ROW VALUE EXPRESSION] = ANY [IN PREDICATE VALUE]

通常,IN 谓词比量化比较谓词更具可读性。

方言支持

此示例使用 jOOQ

BOOK.AUTHOR_ID.eq(any(select(AUTHOR.ID).from(AUTHOR)))

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

ASE, Aurora MySQL, Aurora Postgres, ClickHouse, CockroachDB, DB2, Derby, DuckDB, Firebird, H2, HSQLDB, Hana, Informix, MariaDB, MySQL, Oracle, Postgres, SQLServer, Sybase, Teradata, Vertica, YugabyteDB

BOOK.AUTHOR_ID = ANY (
  SELECT AUTHOR.ID
  FROM AUTHOR
)

Access, BigQuery, Databricks, Exasol, MemSQL, Redshift, SQLDataWarehouse, SQLite, Snowflake, Trino

/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL

反馈

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

The jOOQ Logo