Sql 雪花中的合并函数限制

Sql 雪花中的合并函数限制,sql,snowflake-cloud-data-platform,snowsql,Sql,Snowflake Cloud Data Platform,Snowsql,我正在尝试将Oracle中运行的合并函数转换为与Snowflake兼容的函数。当使用merge时,它限制了我使用where子句。如果有人能帮忙,请一定告诉我 错误消息: 我使用的合并逻辑有以下条件,它在意外情况下抛出错误作为where子句。下面用粗体突出显示 merge into INV_bas_SAP_ZIBP_SUPPLY b using inv_stg_dev.INV_stg_SAP_ZIBP_SUPPLY s on s.SCHEDULE_LINE_DATE = b.SCHEDULE

我正在尝试将Oracle中运行的合并函数转换为与Snowflake兼容的函数。当使用merge时,它限制了我使用where子句。如果有人能帮忙,请一定告诉我

错误消息:

我使用的合并逻辑有以下条件,它在意外情况下抛出错误作为where子句。下面用粗体突出显示

merge into INV_bas_SAP_ZIBP_SUPPLY b using inv_stg_dev.INV_stg_SAP_ZIBP_SUPPLY s
   on s.SCHEDULE_LINE_DATE = b.SCHEDULE_LINE_DATE
   when matched then
      update set b.col1 = s.col1, b.col2 = s.col2
      where col3=not null
   when not matched then
      insert (col1, col2) values (s.col1, s.col2);

请看一下这个网址

您需要按如下方式对其进行修改:
如果匹配且col3不为空,则更新集…

请查看此URL

您需要按如下方式对其进行修改: 当匹配且col3不为空时,则更新集…

其中匹配语句中的条件应写为:

merge into INV_bas_SAP_ZIBP_SUPPLY b using inv_stg_dev.INV_stg_SAP_ZIBP_SUPPLY s
   on s.SCHEDULE_LINE_DATE = b.SCHEDULE_LINE_DATE
   when matched and col3=not null then
      update set b.col1 = s.col1, b.col2 = s.col2
   when not matched then
      insert (col1, col2) values (s.col1, s.col2);
其中,匹配语句中的条件应写成:

merge into INV_bas_SAP_ZIBP_SUPPLY b using inv_stg_dev.INV_stg_SAP_ZIBP_SUPPLY s
   on s.SCHEDULE_LINE_DATE = b.SCHEDULE_LINE_DATE
   when matched and col3=not null then
      update set b.col1 = s.col1, b.col2 = s.col2
   when not matched then
      insert (col1, col2) values (s.col1, s.col2);

谢谢你回复21点。请建议,如果我在查询的ON子句中添加where条件,它的工作方式是否与上面建议的相同。查询:在s.SCHEDULE\u LINE\u DATE=b.SCHEDULE\u LINE\u DATE和col3=匹配时不为空,然后更新集合b.col1=s.col1,b.col2=s.col2,如果不匹配,则插入col1,col2值s.col1,s.col2;若将WHERE子句条件col3=NOTNULL移动到ON子句,则匹配时的功能将保持不变,但在不匹配时也会生效。当前,当不匹配功能是col3为NULL的记录的超集时,但将col3为NOTNULL移动到ON子句后,您将获得记录的子集。功能肯定会改变,这取决于业务逻辑,您希望如何过滤数据。感谢您回复BlackJack。请建议,如果我在查询的ON子句中添加where条件,它的工作方式是否与上面建议的相同。查询:在s.SCHEDULE\u LINE\u DATE=b.SCHEDULE\u LINE\u DATE和col3=匹配时不为空,然后更新集合b.col1=s.col1,b.col2=s.col2,如果不匹配,则插入col1,col2值s.col1,s.col2;若将WHERE子句条件col3=NOTNULL移动到ON子句,则匹配时的功能将保持不变,但在不匹配时也会生效。当前,当不匹配功能是col3为NULL的记录的超集时,但将col3为NOTNULL移动到ON子句后,您将获得记录的子集。功能肯定会改变,这取决于您希望如何过滤数据的业务逻辑。