OceanBase MERGE

2021-06-29 09:08 更新

描述

該語(yǔ)句用來(lái)根據(jù)一張?jiān)幢砀乱粡埬繕?biāo)表的數(shù)據(jù),可以對(duì)目標(biāo)表進(jìn)行插入、更新或者刪除。

格式

MERGE [hint_options] 
         INTO table_factor [opt_alias] 
        USING table_factor [opt_alias]
            ON '(' expr ')'
    [merge_update_clause]
        [merge_insert_clause] 
    
merge_update_clause:
    WHEN MATCHED THEN UPDATE SET update_asgn_list [WHERE expr] [DELETE WHERE expr]

merge_insert_clause:
    WHEN NOT MATCHED THEN INSERT opt_insert_columns VALUES '(' insert_vals ')' [WHERE expr]

參數(shù)解釋

參數(shù)

描述

hint_options

指定 Hint 選項(xiàng)

table_factor

指定源表和目標(biāo)表的表名

ON expr

源表和目標(biāo)表的連接條件

update_asgn_list

更新語(yǔ)句的賦值操作

WHERE expr

觸發(fā)更新、刪除或者插入操作時(shí)的需要滿(mǎn)足的條件

示例

示例表和數(shù)據(jù)基于以下定義:

CREATE TABLE t1 (c1 INT, c2 INT);
CREATE TABLE t2 (c1 INT, c2 INT);

INSERT INTO t1 VALUES(0, 0);
INSERT INTO t1 VALUES(1, null);
INSERT INTO t1 VALUES(2, null);
INSERT INTO t2 VALUES(1, 1);
INSERT INTO t2 VALUES(2, 20); 
INSERT INTO t2 VALUES(3, 3);
INSERT INTO t2 VALUES(4, 40);

根據(jù) T2 的數(shù)據(jù)更新 T1 的數(shù)據(jù):

  1. 如果 t1.c1 在 t2 中能夠找到 c1 取值相同的行,如果 t1.c2 取值為空,那么使用 t2.c2 更新 t1.c2;如果更新之后t1.c2 >= 10,那么刪除該行。

  1. 如果 t2.c1 在 t1 中找不到取值相同的行,將 t2 中的這行插入到 t1 中,且只插入滿(mǎn)足 t2.c2 < 10 的行。

obclient>MERGE INTO t1 USING t2 ON (t1.c1 = t2.c1)
       WHEN MATCHED THEN UPDATE SET c2 = t2.c2 where t1.c2 IS NULL DELETE 
       WHERE t1.c2 >= 10 WHEN NOT MATCHED THEN INSERT VALUES(t2.c1, t2.c2) 
       WHERE t2.c2 < 10;
Query OK, 3 rows affected (0.02 sec)

obclient>SELECT * FROM t1;
+------+------+
| C1   | C2   |
+------+------+
|    0 |    0 |
|    1 |    1 |
|    3 |    3 |
+------+------+
3 rows in set (0.00 sec)
以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)