我正在尝试使用PL / SQL
实现SCD Type1这是我的源表
SRC
ID NAME PIN
101 ABC 250001
503 KLM 260001
981 PQR 260001
207 AKN 560
这是我的目标表
TRGT
ID NAME PIN
101 ABC 25001
981 PQR 26789
如果我使用左外连接
select TRGT.ID AS TRID,
SRC.ID AS SRID
from SRC
left join TRGT on TRGT.ID = SRC.ID;
我会得到这个。
输出
TRID SRID
101 101
NULL 503
981 981
NULL 207
仅仅是FYI
并不重要在SCD类型1
FYI结束
我写了一些逻辑并插入了503,207并更新了101,981。
来到减号和交叉口操作员。
要提取503,207(插入),我可以使用
SELECT ID FROM SRC
MINUS
SELECT ID FROM TRGT
要提取101,981(更新),我可以使用
SELECT ID FROM SRC
INTERSECT
SELECT ID FROM TRGT.
现在问题
对于我来说,当我使用MINUS
,INTERSECT
时,实现整个SCD type1很容易
左外连接。
但哪个会更快,更有效?
因为我要处理SRC中的大量记录和TRGT中的小#s - 初始级别。 但在后期阶段,它将是另一种方式。
感谢您的评论。对不起,我很努力地解释自己的心态。
答案 0 :(得分:2)
您是否考虑过使用MERGE声明?我相信它实际上是为了在像你这样的情况下实现最佳性能。
类似的东西:
MERGE INTO trgt
USING src
ON (trgt.id = src.id)
WHEN MATCHED THEN
UPDATE SET trgt.name = src.name, trgt.pin = src.pin
WHEN NOT MATCHED THEN
INSERT (trgt.id, trgt.name, trgt.pin)
VALUES (src.id, src.name, src. pin);