我将如何验证 table 中的列值并合并到另一个 table
How will I be able to validate the column value from the table and merge into the another table
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 table 加载所有数据,但在加载时
如果 e_id 出现在 c_file 和 e_staging table 中,它应该检查 e_id 到 c_file table
然后它应该根据 c_file ac_ec 列更新 ac_ec 列,如果 e_id 不存在于 e_staging 那么
它应该更新为 'E'.
当前输出:
预期输出:
对于 e_id 1 - 从 e_staging table 加载到 e_details table。它应该检查
c_file table。如果存在 e_id,则应将 ac_ec 列更新为 A。
同样对于所有 e_id 直到 5.
从 e_id 6 到 10。这些不存在于 c_file 中,因此值将更新为 'E'。
工具:SQL开发人员
版本:20.4
在 MERGE
语句的 USING
块中加入 c_file。
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 );
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 table 加载所有数据,但在加载时 如果 e_id 出现在 c_file 和 e_staging table 中,它应该检查 e_id 到 c_file table 然后它应该根据 c_file ac_ec 列更新 ac_ec 列,如果 e_id 不存在于 e_staging 那么 它应该更新为 'E'.
当前输出:
预期输出:
对于 e_id 1 - 从 e_staging table 加载到 e_details table。它应该检查 c_file table。如果存在 e_id,则应将 ac_ec 列更新为 A。 同样对于所有 e_id 直到 5.
从 e_id 6 到 10。这些不存在于 c_file 中,因此值将更新为 'E'。
工具:SQL开发人员 版本:20.4
在 MERGE
语句的 USING
块中加入 c_file。
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 );