【发布时间】:2022-01-07 19:42:04
【问题描述】:
CREATE TABLE c_file (
e_id NUMBER(10),
ac_ec VARCHAR2(100),
constraint pk_c_file primary key(e_id)
);
insert into c_file values(1,'A');
insert into c_file values(2,'A');
insert into c_file values(3,'E');
insert into c_file values(4,'A');
insert into c_file values(5,'E');
CREATE TABLE e_staging (
e_id NUMBER(10),
ac_ec VARCHAR2(100)
);
insert into e_staging values(1,null);
insert into e_staging values(2,null);
insert into e_staging values(3,null);
insert into e_staging values(4,null);
insert into e_staging values(5,null);
insert into e_staging values(6,null);
insert into e_staging values(7,null);
insert into e_staging values(8,null);
insert into e_staging values(9,null);
insert into e_staging values(10,null);
CREATE TABLE e_details (
e_id NUMBER(10),
ac_ec VARCHAR2(100)
);
合并:
MERGE INTO e_details m
USING (
SELECT
e_id,
ac_ec
FROM
e_staging
)
s ON ( m.e_id = s.e_id )
WHEN MATCHED THEN UPDATE
SET m.ac_ec = s.ac_ec
WHEN NOT MATCHED THEN
INSERT (
e_id,
ac_ec )
VALUES
( s.e_id,
s.ac_ec );
问题:
通过此合并,它将加载 e_staging 表中的所有数据,但在加载时 如果 e_id 存在于 c_file 和 e_staging 表中,它应该将 e_id 检查到 c_file 表中 如果 e_id 在 e_staging 中不存在,那么它应该根据 c_file ac_ec 列更新 ac_ec 列 它应该更新为“E”。
当前输出:
预期输出:
对于 e_id 1 - 从 e_staging 表加载到 e_details 表时。它应该检查 c_file 表。如果存在 e_id,则应将 ac_ec 列更新为 A。 直到 5 岁的所有 e_id 也是如此。
从 e_id 6 到 10。c_file 中不存在这些值,因此将值更新为“E”。
工具:SQL Developer 版本:20.4
【问题讨论】: