【SQL】データあればUPDATE、なければINSERT ~ MERGE文 (マージ文) ~

MERGE文

 * SQL標準(SQL:2003規格)
 * UPDATE と INSERT を組み合わせた造語として、UPSERT文ともいう
 * Merge = 「結合する」「吸収する」

対応DB

 * SQL Server2008以降
 * Oracle 9i以降
  など多数

 ※ 文法が異なるので注意

SQL Server

構文

MERGE INTO 主表
 USING 副表
 ON (条件) -- ここがキモ
   WHEN MATCHED THEN
     UPDATE SET 列1 = 値1 [, 列2 = 値2 ...]
   WHEN NOT MATCHED THEN
     INSERT (列1 [, 列2 ...]) VALUES (値1 [, 値2 ...])

サンプル

例1
MERGE INTO sample_table AS t1
USING (SELECT 'X001' id, 'Mike' name) AS t2
ON (EXISTS (SELECT * FROM sample_table))
WHEN MATCHED THEN
   UPDATE SET t1.id = t2.id, t1.name = t2.name
WHEN NOT MATCHED THEN
   INSERT INTO VALUES (t2.id, t2.name);
例2
MERGE INTO sample_table1 AS t1
USING sample_table2 AS t2
ON (t1.id = t2.id)
WHEN MATCHED THEN
   UPDATE SET t1.name = t2.name
WHEN NOT MATCHED THEN
   INSERT INTO VALUES (t2.id, t2.name);


関連記事

データあればUPDATE、なければINSERT

http://blogs.yahoo.co.jp/dk521123/30656970.html

データあればUPDATE、なければINSERT

http://blogs.yahoo.co.jp/dk521123/36225584.html