当前位置: 首页 > 知识库问答 >
问题:

带Merge语句的流

楚德辉
2023-03-14

下面是我在Snowflake1中实现merge with stream的步骤。创建一个表create或replace表employee(employee_id number,salary number,manager_id number);2.创建流。在表employees上创建或替换流employees_stream3.创建消费者表。创建或替换表employees_consumer(employee_id number,salary number,manager_id number);4.我在employees表中插入了一些记录。在雇员中插入数值(8,400,4),(12,500,9),(3,300,5),(4,100,5),(25,350,9);5.当我试图执行下面的命令时,我得到了错误。在A.employee_id=B.employee_id匹配时和B.metadata$action='DELETE'以及B.metadata$action='insert'和元数据$action='INSERT'然后插入(EMPLOYEE_ID,SALARY,MANAGER_ID)值(b.EMPLOYEE_ID,b.SALARY,b.MANAGER_ID);错误是:“SQL编译错误:语法错误第15行,位置8意外'into'。”请帮帮忙。

共有1个答案

杜祺
2023-03-14

这里只是语法上的一点错误。使用MERGE时,您不必在NOT MATCHATED子句上执行insert操作。

所以合并查询应该如下所示:

MERGE INTO EMPLOYEES_CONSUMER AS A 
USING (
  SELECT * 
  FROM employees_stream 
  WHERE NOT (METADATA$ACTION= 'DELETE' AND METADATA$ISUPDATE=TRUE)
) AS B 
ON A.EMPLOYEE_ID=B.EMPLOYEE_ID 

WHEN MATCHED AND b.METADATA$ACTION= 'INSERT' AND b.METADATA$ISUPDATE THEN UPDATE 
SET A.EMPLOYEE_ID =B.EMPLOYEE_ID, 
    A.SALARY=B.SALARY, 
    A.MANAGER_ID=B.MANAGER_ID 

WHEN MATCHED AND b.METADATA$ACTION= 'DELETE' THEN DELETE 

WHEN NOT MATCHED AND b. METADATA$ACTION= 'INSERT' THEN INSERT (EMPLOYEE_ID,SALARY,MANAGER_ID) VALUES (B.EMPLOYEE_ID,B.SALARY,B.MANAGER_ID)
;
 类似资料:
  • 问题内容: 我正在尝试在Go中执行MERGE语句: 但是我得到了这个错误: 在MySQL中也是如此: 怎么了? 问题答案: 不支持,等效的是 插入…在重复的密钥更新上 尝试这个, 但请确保将其设置为或。

  • 问题内容: 源表 目标表 合并后 我正在使用此SQL 这会导致错误 消息8672,级别16,状态1,第18行 MERGE语句尝试多次更新或删除同一行。当目标行与多个源行匹配时,就会发生这种情况。MERGE语句不能多次更新/删除目标表的同一行。优化ON子句以确保目标行最多匹配一个源行,或使用GROUP BY子句对源行进行分组。 我想用三个匹配值中的任何一个用地址值更新A中的行。这该怎么做? 问题答案

  • 问题内容: 我正在使用一条语句来添加新记录或更新当前记录。我有多个线程通过多个连接和多个语句(每个线程一个连接和一个语句)来驱动数据库。我一次要批处理50个语句。 我很惊讶在考试中遭到违反。我希望这是不可能的,因为将作为单个事务执行,或者是吗? 我的Java代码如下所示: 查询如下所示: 该错误显示为: 表格上的键是字段上的键。 问题答案: 是原子的,意味着所有更改都已提交或所有更改都已回滚。 在

  • 问题内容: 我有以下SQL代码(这是到目前为止我得到了多少): 以下是VIEW_1的定义: 但是我收到以下错误消息: 是什么导致错误?在哪里更改代码以使其起作用? 感谢您的帮助! 问题答案: 以我的经验,不仅在USING子句为MATCH表中的一行返回一行以上时,而且在无法 确定 仅返回一行(即使没有实际的行)时,也会返回此错误。返回多行的情况)。为了在这种情况下强制解析器接受查询,我通常会在MAT

  • 问题内容: 我将如何在没有硬编码值的情况下编写此sql语句? 宁愿有这样的事情: 提前致谢.. 问题答案: 用您当前的方式构造SQL查询是一个糟糕的主意,因为它为各种SQL注入攻击打开了大门 。为了正确执行此操作,您必须改为使用“ 预备语句”。这也将解决您目前显然遇到的各种逃避问题。 请注意,这是一个昂贵的调用(除非您的应用程序服务器使用语句缓存和其他类似的功能)。从理论上讲,最好先准备一次语句,