SQL> create table m1 as select * from mail where rownum<5;
SQL> create table m2 as select id,name,mail from (select rownum rn,id,name,mail from mail) where rn>3; ---注意当利用rownum大于某值时,需用到子查询,在子查询中的结果集中显示出rownum列(并给伪列一个别名)--最后对这个伪列做大于的比较
两表内容:SQL> select * from m1;
ID NAME MAIL
---------- ------------------------- -------------------------
258 wk ge.wang@htfg.com259 wk zhijun.li@htfg.com260 wk fang.wu@htfg.com261 wk pei.sun@htfg.com ---两表重复行 ---------表共4行数据
SQL> select * from m2;
ID NAME MAIL
---------- ------------------------- -------------------------
261 wk pei.sun@htfg.com ----两表重复行 -----表共6行数据
262 wk xiaoping.shi@htfg.com263 wk jizhu.hu@htfg.com264 wk wei.wang@htfg.com265 wk wx@htfg.com266 wk meng.wu@htfg.com
二:用法示例
① 以m1为目标表,将m2插入到m1,重复的行不插入
SQL> merge into m1 a ------ into 目标表m1
2using m2 b ------ use 源表m2
3on (a.id=b.id) ------ on 基于条件 m1的id和m2的id 列值相等
4 when not matched then ------ 不匹配关联条件,作插入处理
5 insert values(b.id,b.name,b.mail);
SQL> select count(*) from m1;
COUNT(*)9
②以m1为目标表,将m2插入到m1,重复的行做更新set
SQL> mergeinto m1 ausing m2 b
on (a.id=b.id)
when matched then------如果匹配关联条件
update seta.name='hththt'------则设置匹配的行的 name段 值为 hththt
when not matched then
insert values(b.id,b.name,b.mail);
③ 不能更新on 关联条件 里面的字段 如例子当中的 id列
报错 ORA-38104: Columns referenced in the ON Clause cannot be updated: "A"."ID"