MERGE語句的使用!

2021-04-13 08:44:57 字數 1469 閱讀 1138

今天需要更新乙個表的標識,需要和另外乙個表關聯,但是update無法做到這點。

a表中有乙個memo,b表中有乙個欄位存了幾個string,當b表中的任何乙個string為a表中的memo的子串時,更新a表中flag。update如下

update passap.tb_finpay_vth_check a set a.check_flag = 2

--where a.txnamt < 0 and a.tlrnum between 'sz01' and 'sz30' and passap.tb_finpay_dsf_memo  on locate(c.name, a.furinf) > 0)

後來決定使用merge:

用途 merge 命令可以用來用乙個表中的資料來修改或者插入到另乙個表。插入或者修改的操作取決於on子句的條件。

該語句可以在同一語句中執行兩步操作,可以減少執行多條insert 和update語句。

merge是乙個確定性的語句,即不會在同一條merge語句中去對同一條記錄多次做修改操作。

語法 其中,merge_insert_clause::=

關鍵字、引數

into 子句

在into子句中指定所要修改或者插入資料的目標表

using 子句

在using子句中指定用來修改或者插入的資料來源。資料來源可以是表、檢視或者乙個子查詢語句。

on 子句

在on子句中指定執行插入或者修改的滿足條件。在目標表中符合條件的每一行,oracle用資料來源中的相應資料修改這些行。對於不滿足條件的那些行,oracle則插入資料來源中相應資料。

when matched | not matched

用該子句通知oracle如何對滿足或不滿足條件的結果做出相應的操作。可以使用以下的兩類子句。

merge_update子句

merge_update子句執行對目標表中的字段值修改。當在符合on子句條件的情況下執行。如果修改子句執行,則目標表上的修改觸發器將被觸發。

限制:當修改乙個檢視時,不能指定乙個default值

merge_insert 子句

merge_insert子句執行當不符合on子句條件時,往目標表中插入資料。如果插入子句執行,則目標表上插入觸發器將被觸發。

限制:當修改乙個檢視時,不能指定乙個default值

修改後的merge語句如下

merge into passap.tb_finpay_vth_check a

using passap.tb_finpay_dsf_memo b

on ( a.txnamt < 0 and a.tlrnum between 'sz01' and 'sz30' and locate(b.name, a.furinf) > 0)

when matched then update set a.check_flag = 2;

其實merge不光是在多表關聯更新時用到,更重要的是可以完美的將insert 和 update語句結合起來。

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...

MERGE語句的使用 複製表

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