【问题标题】:Teradata MERGE with DELETE and INSERT - syntax?Teradata MERGE 与 DELETE 和 INSERT - 语法?
【发布时间】:2018-11-29 22:21:38
【问题描述】:

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

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' 关键字之间存在某些内容”

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

【问题讨论】:

  • 阅读手册。 WHEN MATCHED THEN DELETE WHEN NOT MATCHED THEN INSERT VALUES (scr.*)
  • Teradata 不支持在 MERGE 语句中同时删除和插入
  • @MatBailie 是吗?因为你的陈述不起作用;)

标签: merge teradata


【解决方案1】:

您可以使用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;

【讨论】:

  • 嗨,很抱歉没有提到这一点,但我正在寻找交易安全的东西。不过我想我可以使用开始/结束事务块,谢谢
  • 我认为这就是您的要求: 背景:临时表包含对目标表的修复,因为要从临时表中删除不正确的行并用一个正确的行替换。
  • 对不起,我的评论不够清楚,我同意.. 合并语句显示了我想要的,只是不可能。更新了要求..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-06
  • 2020-09-05
  • 2012-07-07
  • 1970-01-01
  • 2015-09-30
相关资源
最近更新 更多