Oracle中使用MergeInto去除数据库重复记录

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Oracle中使⽤MergeInto去除数据库重复记录
Oracle中的Merge Into在数据库可以替代update/insert使⽤,同时具有⼆者功能,在数据库中没有对应记录时,插⼊记录;数据库中有对应记录时,更新记录。

语法:
MERGE INTO table_name alias1
USING (table|view|sub_query) alias2
ON (join condition)
WHEN MATCHED THEN
UPDATE table_name
SET col1 = col_val1,
col2 = col_val2
WHEN NOT MATCHED THEN
INSERT (column_list) VALUES (column_values);
应⽤:
1、当数据库中已经存在数据时,覆盖数据库中记录,即完全拿最新的数据替换数据库中已有数据。

MERGE INTO D_MESSAGE_FLOOD T1
USING (select'14' id from dual) T2
ON ( T1.id=T2.id)
WHEN MATCHED THEN
UPDATE set T1.dr_2='dr_2',T1.dd='dd'
WHEN NOT MATCHED THEN
INSERT (id) VALUES('14');
2、当数据库中已存在数据时,向数据库中追加记录,即只更新此条记录中为空的字段,不为空的字段保留
MERGE INTO D_MESSAGE_FLOOD T1
USING (select'14' id from dual) T2
ON ( T1.id=T2.id)
WHEN MATCHED THEN
UPDATE SET T1.dr_2 = (case when T1.dr_2 is null or T1.dr_2=''then'dr_2' else T1.dr_2 end),
T1.dd = (case when T1.dd is null or T1.dd=''then'dd 'else T1.dd end)
WHEN NOT MATCHED THEN
INSERT (id) VALUES('14');
3、当数据库中已存在数据时,丢弃最新记录,保留数据库中原有记录。

这个⽐较简单,当判断条件成⽴时,不做处理就⾏了
MERGE INTO D_MESSAGE_FLOOD T1
USING (select'14' id from dual) T2
ON ( T1.id=T2.id)
WHEN NOT MATCHED THEN
INSERT (id) VALUES('14');。

相关文档
最新文档