首页 > 解决方案 > Teradata MERGE 与 DELETE 和 INSERT - 语法?

问题描述

我一直在尝试为以下情况找到正确的语法(如果可能的话?):

MERGE INTO TAB_A tgt
USING TAB_B src ON (src.F1 = tgt.F1 AND src.F2 = tgt.F2
WHEN MATCHED THEN DELETE
ELSE INSERT (tgt.*) VALUES (src.*)

背景:临时表包含对目标表的修复,因为它包含两种类型的行:要删除的不正确行(它们与目标表中的行匹配),以及应该被“更正”的行插入(它替换所有“删除”行)。

所以本质上:删除任何匹配的东西;插入任何不匹配的内容。

我得到的当前错误是:

“语法错误:预期在 'DELETE' 关键字和 'ELSE' 关键字之间存在某些内容”

任何帮助表示赞赏,谢谢!

标签: mergeteradata

解决方案


您可以使用 MultiStatement DELETE 和 INSERT 语句将临时表中的数据更正到目标表中

DELETE FROM TAB_A WHERE EXISTS (SELECT 1 FROM TAB_B WHERE TAB_A.F1 = TAB_B.F1 AND TAB_A.F2 = TAB_B.F2)
;INSERT INTO TAB_A SELECT * FROM TAB_B;

推荐阅读