使用SQL MERGE語句組合表

iSQlServer發表於2008-12-18
使用本語句可以在一條語句中連線兩個表。以前要使用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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章