该语句用来根据一张源表更新一张目标表的数据,可以对目标表进行插入、更新或者删除。
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]
参数 |
描述 |
---|---|
hint_options |
指定 Hint 选项 |
table_factor |
指定源表和目标表的表名 |
ON expr |
源表和目标表的连接条件 |
update_asgn_list |
更新语句的赋值操作 |
WHERE expr |
触发更新、删除或者插入操作时的需要满足的条件 |
示例表和数据基于以下定义:
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);
根据 T2 的数据更新 T1 的数据:
如果 t1.c1 在 t2 中能够找到 c1 取值相同的行,如果 t1.c2 取值为空,那么使用 t2.c2 更新 t1.c2;如果更新之后t1.c2 >= 10
,那么删除该行。
如果 t2.c1 在 t1 中找不到取值相同的行,将 t2 中的这行插入到 t1 中,且只插入满足 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)
Readablepublic interface ReadableReadable 是字符的来源。 来自 Readable 的字符可通过 CharBuffer 提供给 read 方法的调用者...
StringBuilderjava.lang.Object |---java.lang.StringBuilderpublic final class StringBuilderextends Objectimplements Append...
UnknownErrorjava.lang.Object |---java.lang.Throwable |---|---java.lang.Error |---|---|---java.lang.VirtualMachineError |...
Object wx小程序 API 全局对象,用于承载小程序能力相关 API。Object wx.env小程序环境变量对象String wx.env.USER_DATA_PATH文...
商品数据接入(内测)商品数据应用场景商品数据目前应用于微信扫一扫识物功能、小程序商品搜索功能和扫条码三个功能。 这些功能...
operation.getFeedback本接口应在服务器端调用,详细说明参见服务端API。获取用户反馈列表请求地址GET https://api.weixin.qq.co...