WHEN NOT MATCHED BY SOURCE(当源表中没有匹配项时)
适用于 ✅ 开源版 ✅ 专业版 ✅ 企业版
一些方言增加了对 BY SOURCE
子句的额外支持,将 MERGE
语句的 RIGHT JOIN 语义转换为 LEFT JOIN
或 FULL JOIN
语义,这意味着可以对 TARGET
表中未被 SOURCE
表匹配的行进行操作。 这主要用于 DELETE
这些行,但也可能使用 UPDATE
的其他用例。
出于对称原因,并且可能为了使语句的意图更清晰,许多这些方言也支持BY TARGET
子句。BY TARGET
子句对 WHEN NOT MATCHED THEN INSERT 子句没有逻辑影响。
方言支持
此示例使用 jOOQ
mergeInto(BOOK_TO_BOOK_STORE) .using(BOOK_TO_BOOK_STORE_STAGING) .on(BOOK_TO_BOOK_STORE.BOOK_ID.eq(BOOK_TO_BOOK_STORE_STAGING.BOOK_ID) .and(BOOK_TO_BOOK_STORE.NAME.eq(BOOK_TO_BOOK_STORE_STAGING.NAME))) .whenNotMatchedBySource().thenDelete()
翻译成以下特定方言的表达式
Databricks, Postgres
MERGE INTO BOOK_TO_BOOK_STORE USING BOOK_TO_BOOK_STORE_STAGING ON ( BOOK_TO_BOOK_STORE.BOOK_ID = BOOK_TO_BOOK_STORE_STAGING.BOOK_ID AND BOOK_TO_BOOK_STORE.NAME = BOOK_TO_BOOK_STORE_STAGING.NAME ) WHEN NOT MATCHED BY SOURCE THEN DELETE
SQLServer
MERGE INTO BOOK_TO_BOOK_STORE USING BOOK_TO_BOOK_STORE_STAGING ON ( BOOK_TO_BOOK_STORE.BOOK_ID = BOOK_TO_BOOK_STORE_STAGING.BOOK_ID AND BOOK_TO_BOOK_STORE.NAME = BOOK_TO_BOOK_STORE_STAGING.NAME ) WHEN NOT MATCHED BY SOURCE THEN DELETE;
ASE, Access, Aurora MySQL, Aurora Postgres, BigQuery, ClickHouse, CockroachDB, DB2, Derby, DuckDB, Exasol, Firebird, H2, HSQLDB, Hana, Informix, MariaDB, MemSQL, MySQL, Oracle, Redshift, SQLDataWarehouse, SQLite, Snowflake, Sybase, Teradata, Trino, Vertica, YugabyteDB
/* UNSUPPORTED */
使用 jOOQ 3.21 生成。早期 jOOQ 版本的支持可能有所不同。 在我们的网站上翻译您自己的 SQL
反馈
您对此页面有任何反馈吗? 我们很乐意听到您的反馈!