merge - 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' 关键字之间存在某些内容”
任何帮助表示赞赏,谢谢!
解决方案
您可以使用 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;
推荐阅读
- java - 如何在 JBPM 中设置 HTTP 请求标头
- node.js - 如何使用局部视图显示 ajax 错误?
- hibernate - Grails NonUniqueObjectException:具有相同标识符值的不同对象已与会话关联
- java - 退出 do-while 循环应用程序
- json - 使用 ARM 模板创建 NIC 时如何从另一个虚拟网络/资源组引用子网
- python - Python 中的继承:派生类是否“复制”或“引用”其基类中的方法?
- c# - 解决 .dll 的依赖关系
- javascript - 有没有办法在 NodeJS 文件范围动态中获取变量名?
- html - 带有中心和底部元素的引导卡覆盖
- django - 为什么我的 django 项目返回“django.core.exceptions.AppRegistryNotReady:应用程序尚未加载”错误