【问题标题】:Execute result from subquery in a merge into statement在合并到语句中执行子查询的结果
【发布时间】:2022-10-12 21:24:19
【问题描述】:

我有一个查询,其输出为下表(2 列)。这意味着,我将使用结果将其包装在合并到语句中。

INSERT_COLUMNS          UPDATE_COLUMNS
BANK_NAME               target.BANK_NAME = source.BANKNAME

我在说的是这样的:

with sql_prepare_merge as (
SELECT *
FROM another_table
),

MERGE INTO bank_raw AS target
    USING bank AS source
        ON source.id = target.id
    WHEN MATCHED THEN
        UPDATE SET (select update_columns from sql_prepare_merge)
    WHEN NOT MATCHED THEN
        INSERT (select insert_columns from sql_prepare_merge)
        VALUES (source.id, (select insert_columns from sql_prepare_merge));

请记住,“sql_prepare_merge”是 CTE 中的名称,我在其中获取与您共享的表 - 它包含更多代码,但它们在这里没有帮助。所以,我打算把子查询产生的文本插入到合并语句中。

到目前为止,我得到的错误是:syntax error line 19 at position 4 unexpected 'WHEN'.。顺便说一句,这是在雪花里面。

【问题讨论】:

    标签: sql snowflake-cloud-data-platform


    【解决方案1】:

    不幸的是,根据我对文档的理解,这是不可能的:https://docs.snowflake.com/en/sql-reference/sql/merge.html#notmatchedclause-for-inserts

    在插入的非匹配子句中,您只能指定此类值/表达式,请参阅源关系。这意味着您需要以某种方式调整您的源部分本身(例如,通过将初始源与另一个表连接)。如果这不可能,您将需要使用单独的 INSERT 和 UPDATE 语句。

    【讨论】: