SQL-merge into 語法紀錄


December 22, 2022 程式語言



這次被指派實作不同資料庫同步的功能,公司現有一個ERP系統,資料來源一律以此為標準,讓客戶可在自家系統新增、編輯、寫入ERP、與ERP同步...

whatever~ 總之就是資料寫入EPR後,就是以ERP為準,也因為ERP會定期更動資料,

在客戶自家系統已寫入ERP的資料需要頻繁同步。

解決方法

🔗

原本想法是直接撈取兩個資料庫資料,逐一做比對,比對有差異的就直接在專案裡生成update的sql語法,

最後一起更新。(我是覺得蠻直觀的,反正就是硬幹)

不過主管建議可以用 merge into 的做法,直接在資料庫裡實作就好,於是就要我去查一查使用方式。

程式碼

🔗

Merge into語法如下:

sql
--sql
MERGE INTO table_a target -- 需同步的資料(自家系統)
USING (select * from table_b ) source -- 基準資料(ERP)
ON (target.A=source.A and target.B=source.B) -- 兩張表對應的key 
WHEN MATCHED THEN      -- 若有找到對應key的資料,則執行以下動作
    UPDATE             -- 這裡我是對表做編輯
    SET target.E = source.E, 
        target.D = source.D 
WHEN NOT MATCHED THEN  -- 若沒有找到對應key的資料,則執行以下動作(可以省略)
    INSERT (target.E,target.D) VALUES (source.E,source.D); 

結論

🔗

語法簡潔是蠻方便的,也不用同時執行多筆update語法。

最後是沒比較兩種方法實際運行上的速度差異,但因為Merge into的做法不用逐一比對欄位是否有差異,

而是只要有比對到對應的key就直接執行編輯的動作,又是直接在資料庫執行,應該是會快上不少。

但缺點也是很明顯,因為不管如何有資料就是直接執行編輯的動作,對於有log紀錄的資料表,應該會增加蠻大的負荷跟資料量。

SQL



Avatar

Alvin

軟體工程師,喜歡金融知識、健康觀念、心理哲學、自助旅遊與系統設計。

相關文章






留言區 (0)



  or   

尚無留言