ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 使用SQL MERGE语句组合表

使用SQL MERGE语句组合表

原创 Linux操作系统 作者:iSQlServer 时间:2008-12-18 13:30:09 0 删除 编辑
使用本语句可以在一条语句中连接两个表。以前要使用UPDATE去更新两个表中都存在的记录,或者用INSERT添加两个合并表中不存在的记录,必须写两个SQL语句,而现在这两种操作都只要一条SQL MERGE语句就可以实现。

 

create table inventory (part_nointeger,part_count integer);
insert into inventory values(1,5);
insert into inventory values(3,6);

create table shipment (part_nointeger,part_count integer);
insert into shipment values(1,2);
insert into shipment values(2,2);

MERGE INTO inventory
    USING shipment
    ON (inventory.part_no = shipment.part_no)
WHEN MATCHED THEN
   UPDATE SET part_count = part_count + shipment.part_count
WHEN NOT MATCHED THEN
   INSERT VALUES (shipment.part_no,shipment.part_count);

commit;
select * from inventory;

  PART_NO   PART_COUNT
----------              ----------
      1                      4
      3                      6
      2                      2

 

执行的结果是shipment数据已经被合并到inventory中,所以与inventory中某些东西相匹配的shipment都会被添加到count中,而没有得到的匹配的就不会添加到inventory中。

 

在MERGE语句中必须指定一个WHEN MATCHED和一个WHEN NOT MATHCED语句。如果除这两种情况之外还有别的情况,你可能就需要使用一个常规的INSERT或者UPDATE语句。

 

另外一点是MERGE语句一次只能修改一行记录,而且不能修改在ON子句中引用的列。

 

MERGE语句的目标表(target table)(在本例中是inventory)必须是一个可以使用INSERT语句进行插入或者UPDATE语句进行更新的表或者视图。源表(source table)(在本例中是shipment)可以是任何的查询表,比如说外部表或者管道化表函数。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/16436858/viewspace-515897/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-10-17

  • 博文量
    1319
  • 访问量
    2101913