IN谓词 (degree > 1)
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
R IN [IN predicate value]
R = ANY [IN predicate value]
jOOQ 支持带有行值表达式的 IN 谓词。 此处给出一个例子
-- Using an IN list (BOOK.ID, BOOK.TITLE) IN ((1, 'A'), (2, 'B')) -- Using a subselect (BOOK.ID, BOOK.TITLE) IN ( SELECT T.ID, T.TITLE FROM T )
// Using an IN list row(BOOK.ID, BOOK.TITLE).in(row(1, "A"), row(2, "B")); // Using a subselect row(BOOK.ID, BOOK.TITLE).in( select(T.ID, T.TITLE) .from(T) );
在这两种情况下,即当使用 IN 列表或使用子查询时,都会检查谓词的类型。 谓词的两侧必须具有相等的度和行类型。
目前仅适用于不将子查询作为 IN 谓词值的 IN 谓词,才可以模拟对行值表达式支持不好的 IN 谓词。
方言支持
此示例使用 jOOQ
row("FIRST", "LAST").in(select(AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME).from(AUTHOR))
翻译成以下特定方言的表达式
ASE, Access, Derby, DuckDB, Exasol, Firebird, Hana, Informix, MemSQL, SQLDataWarehouse, SQLServer, Sybase
EXISTS (
SELECT alias_1.v0, alias_1.v1
FROM (
SELECT
AUTHOR.FIRST_NAME v0,
AUTHOR.LAST_NAME v1
FROM AUTHOR
) alias_1
WHERE (
'FIRST' = alias_1.v0
AND 'LAST' = alias_1.v1
)
)
Aurora MySQL, Aurora Postgres, ClickHouse, CockroachDB, H2, HSQLDB, MariaDB, MySQL, Postgres, Redshift, SQLite, Teradata, Trino, YugabyteDB
('FIRST', 'LAST') IN (
SELECT AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME
FROM AUTHOR
)
BigQuery, DB2, Snowflake, Vertica
EXISTS (
SELECT alias_1.v0, alias_1.v1
FROM (
SELECT
AUTHOR.FIRST_NAME v0,
AUTHOR.LAST_NAME v1
FROM AUTHOR
) alias_1
WHERE ('FIRST', 'LAST') = (alias_1.v0, alias_1.v1)
)
Databricks
EXISTS (
SELECT alias_1.v0, alias_1.v1
FROM (
SELECT
AUTHOR.FIRST_NAME v0,
AUTHOR.LAST_NAME v1
FROM AUTHOR
) alias_1
WHERE ('FIRST', 'LAST') = (
coalesce(alias_1.v0),
coalesce(alias_1.v1)
)
)
Oracle
('FIRST', 'LAST') IN ((
SELECT AUTHOR.FIRST_NAME, AUTHOR.LAST_NAME
FROM AUTHOR
))
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听取您的意见!