DB2 Merge 語句的使用

2021-05-10 05:16:45 字數 991 閱讀 4004

----start

db2 merge 語句的作用非常強大,它可以將乙個表中的資料合併到另乙個表中,在合併的同時可以進行插入、刪除、更新等操作。我們還是先來看個簡單的例子吧,假設你定義了乙個雇員表(employe),乙個經理表(manager),如下所示:

經過一段時間,你發現這樣的資料模型,或者說表結構設計簡直就是一大敗筆,經理和雇員都是員工嘛,為什麼要設計兩個表呢?發現錯誤後就需要改正,所以你決定,刪除經理表(manager)表,將manager 表中的資料合併到employe 表中,仔細分析發現,王五在兩個表中都存在(可能是幹的好公升官了),而劉八在employe 表中並不存在,現在,我們要求把employe 表中不存在的manager都插入到employe 表中,存在的更新薪水。該怎麼辦呢?這個問題並不難,通常,我們可以分兩步,如下所示:

上面的處理是可以的,但是我們還可以有更簡單的方法,就是用merge語句,如下所示:

在上面的處理中,我們用經理表(manager)的薪水更新了雇員表(employe)的薪水,假設現在要求,如果經理表(manager)的薪水》雇員表(employe)的薪水的時候更新,否則不更新,怎麼辦呢?如下:

不仔細的朋友可能沒有看出上面兩條語句的區別,哈哈,請仔細對比一下這兩條語句。上面的語句中多了else ignore語句,它的意思正如它英文的意思,其它情況忽略不處理。如果你認為理論上應該不存在em.salary>ma.salary的資料,如果有,說明有問題,你想拋個異常,怎麼辦?如下:

對於em.salary>ma.salary的情況,如果你不想拋異常,而是刪除employe中的資料,怎麼辦?如下:

以上簡單介紹了merge語句的使用,它的應用不只是上面介紹的情況,其實它可以應用在很多其他語句不好處理情況,這需要你去發現,記住熟能生巧。

---更多參見:db2 sql 精萃

----last updated on 2009.11.6

----written by shangbo on 2009.11.6

----end

MERGE語句的使用!

今天需要更新乙個表的標識,需要和另外乙個表關聯,但是update無法做到這點。a表中有乙個memo,b表中有乙個欄位存了幾個string,當b表中的任何乙個string為a表中的memo的子串時,更新a表中flag。update如下 update passap.tb finpay vth check...

Merge 語句的使用

db2 merge 語句的作用非常強大,它可以將乙個表中的資料合併到另乙個表中,在合併的同時可以進行插入 刪除 更新等操作。我們還是先來看個簡單的例子吧,假設你定義了乙個雇員表 employe 乙個經理表 manager 如下所示 雇員表 employe create table employe e...

MERGE語句的使用 複製表

今天需要更新乙個表的標識,需要和另外乙個表關聯,但是update無法做到這點。a表中有乙個memo,b表中有乙個欄位存了幾個string,當b表中的任何乙個string為a表中的memo的子串時,更新a表中flag。update如下 update passap.tb finpay vth check...