sql - 在 oracle 中快速执行什么语句,删除+插入或插入 ID 不在列表中。?
问题描述
我有一个包含两个表 ABC 和 EXT_ABC 的过程。EXT_ABC 表加载了每日数据(EXT_ABC 在每天结束时被截断),ABC 加载了来自 EXT_ABC 的每日数据以维护历史。现在有时 EXT_ABC 会为 ABC 表中已经存在的 ID 带来更新数据,因此我们使用以下逻辑。
DELETE FROM ABC WHERE ID IN ( SELECT ID FROM EXT_ABC);
commit;
INSERT INTO ABC
select * from EXT_ABC;
是上述逻辑快速还是我可以执行以下操作来优化流程。
INSERT INTO ABC
select * from EXT_ABC where ID not in (SELECT ID FROM ABC );
两个表在 ID 列上都有索引。
解决方案
听起来像 Merge 语句可以在这里使用,例如:
merge into abc tgt
using ext_abc src
on (tgt.id = src.id)
when not matched then
insert (<list of target table columns>)
values (<list of source table columns>);
推荐阅读
- c++ - 解释 static_cast "static_cast
“ 句法? - android - 使用 DataBinding 时 MotionLayout 动画不起作用
- javascript - 普通 JavaScript 输入中的自动完成括号
- python - 无法在函数中使用 cls 调用字典数据类属性,但如果我使用类名则可以
- google-chrome - 在 chrome 扩展的注入内容脚本中获取系统处理器“cpu”的名称和型号
- python-3.x - django unittest 中的错误:“对象没有属性”对象
- python - 在 Django 中获取每个页面用户类型的值
- javascript - 我在我的 angular-cli 项目“找不到模块”中收到此错误
- vue.js - 将数据从刀片传递到 vue 并保持父子同步?
- javascript - 从列mysql,nodejs的不同值生成列表