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 ...])
サンプル
例1MERGE 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);
参考文献
http://d.hatena.ne.jp/matu_tak/20100124/1264361341http://d.hatena.ne.jp/haronoid/20101223/1293087226