oracle - 通过比较源表和目标表来合并目标表
问题描述
我们是否在 oracle 中都提供了匹配的源表和目标表
我有三个条件:
- 当源和目标匹配然后根据条件更新
- 当源中的新数据不在目标中时,然后添加记录。
- 当数据不在源中但在目标中时。然后更新目标表中的标志。
请注意:源表每天都会刷新。
我可以在合并中执行第 1 步和第 2 步,如下所示
merge into target as t using Source as S
On t.pk1 = s.pk1 and t1.pk2 = s.pk2
when matched and t.normalKey <> s.NormalKey --Step 1
then update t.normalKey = s.NormalKey
when not matched
then insert (t.field) values (s.field) --Step 2
Step 3-- ?
在 sql server 中有一种处理方法。如下所示,我试图找出在 Snowflake 中使用“By”子句的相同方式。
下面是我们在 sqlserver 中做的例子。
MERGE <target_table> [AS TARGET]
USING <table_source> [AS SOURCE]
ON <search_condition>
[WHEN MATCHED
THEN <merge_matched> ]
[WHEN NOT MATCHED [BY TARGET]
THEN <merge_not_matched> ]
[WHEN NOT MATCHED BY SOURCE
THEN <merge_matched> ];
我的最终解决方案是使用另一个合并/更新语句。首先合并以处理步骤 1 和 2。
和另一个更新只是为了处理第 3 步。
还是我们有更好的方法。
解决方案
推荐阅读
- python - 是否可以在 python 中创建一个带有空格的对象?
- microsoft-cognitive - 认知服务文本到语音中的错误(Raul,西班牙语中的 Apollo 语音)
- typescript - 在模块上找不到导出
- javascript - Javascript 中的异步生成器:产生 Promise 和产生等待的 Promise 之间有区别吗?
- node.js - Discord.js 向特定频道发送消息
- python - 如何获取请求的主机名?
- docker - 当我使用启动时,Docker 容器进入兴奋状态。为什么?
- filesystems - 快速插入和拔出 USB 时 GetVolumeInformationW 卡住
- python - TypeError:无效的类型提升
- javascript - 将 connect-redux-shorthand 符号转换为 JS/TypeScript