Oracle中使用Merge Into去除數據庫重復記錄


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');

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM