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_id 存在于 c_file 和 e_staging 表中,則應根據 c_file ac_ec 更新 ac_ec 列如果 e_staging 中不存在 e_id 列,則應將其更新為“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
uj5u.com熱心網友回復:
加入到陳述句USING塊中的c_file MERGE。
MERGE INTO e_details m
USING (
SELECT
e.e_id,
NVL(c.ac_ec,'E') AS ac_ec
FROM
e_staging e LEFT OUTER JOIN c_file c ON e.e_id = c.e_id
)
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 );
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371576.html
上一篇:不能使用區域函式。不合法的識別符
