有一个表t,有两个字段a、b,我们想在表t中做insert/update,如果条件满足,则更新t中b的值,否则在t中插入一条记录。在microsoft的sql语法中,很简单的一句判断就可以了,sql server中的语法如下:(推荐学习:mysql视频教程)
if exists(select 1 from t where t.a='1001' )update t set t.b=2 where t.a='1001'elseinsert into t(a,b) values('1001',2);
但是很明显这个语法对于sql只能更改一条语句,并且oracle不能使用.所以就有了merge into(oracle 9i引入的功能)语法
merge into 目标表 a using 源表 b on(a.条件字段1=b.条件字段1 and a.条件字段2=b.条件字段2 ……) when matched then update set a.更新字段=b.字段 when not matched then insert into a(字段1,字段2……)values(值1,值2……)
在一个同时存在insert和update语法的merge语句中,总共insert/update的记录数,就是using语句中源表的记录数。
源表b可能是一张表结构不同于a的表,有可能是一张构建相同表结构的临时表,也有可能是我们自己组起来的数据.
更多mysql相关技术文章,请访问mysql数据库图文教程栏目进行学习!
以上就是merge into用法的详细内容。
