SQL MERGE文でUPDATEまたはINSERTを実行する


この記事でやること

既に存在するデータの場合はUPDATE、存在しない場合はINSERTすることができるSQL MERGE文を紹介します。

MERGE文は「Oracle Database、DB2、Microsoft SQL Server、Firebird」で使えるそうです。

本記事ではSQL Serverを例に記載致します。

 

MERGE文

CUSTOMERSテーブルが更新先

CUSTOMERS2テーブルが更新元データ

とした場合のSQL例です。

9行目:結合条件です。この条件に合致すればUPDATE、合致しなければINSERTが実行されます。

 

例:UPDATE(更新)が実行されるケース

CUSTOMERSテーブル(更新先)

ID 顧客名 フリガナ 郵便番号
A001 鈴木一郎 スズキイチロウ 5330011
A002 鈴木二郎 スズキジロウ 5330012
A003 鈴木三郎 スズキサブロウ 5330013
B001 田中一郎 タナカイチロウ 5340011
B002 田中二郎 タナカジロウ 5340012
B003 田中三郎 タナカサブロウ 5340013

 

CUSTOMERS2テーブル(更新元)

ID 顧客名 フリガナ 郵便番号
A001 佐藤一郎 サトウイチロウ 5330011

 

CUSTOMERSテーブル(更新結果)

IDがA001のデータは既に存在するので、UPDATE(更新)が実行されます。

ID 顧客名 フリガナ 郵便番号
A001 佐藤一郎 サトウイチロウ 5330011
A002 鈴木二郎 スズキジロウ 5330012
A003 鈴木三郎 スズキサブロウ 5330013
B001 田中一郎 タナカイチロウ 5340011
B002 田中二郎 タナカジロウ 5340012
B003 田中三郎 タナカサブロウ 5340013

 

例:INSERT(挿入)が実行されるケース

CUSTOMERSテーブル(更新先)

ID 顧客名 フリガナ 郵便番号
A001 鈴木一郎 スズキイチロウ 5330011
A002 鈴木二郎 スズキジロウ 5330012
A003 鈴木三郎 スズキサブロウ 5330013
B001 田中一郎 タナカイチロウ 5340011
B002 田中二郎 タナカジロウ 5340012
B003 田中三郎 タナカサブロウ 5340013

 

CUSTOMERS2テーブル(更新元)

ID 顧客名 フリガナ 郵便番号
C001 佐藤一郎 サトウイチロウ 5330011

 

CUSTOMERSテーブル(更新結果)

IDがC001のデータは存在しないので、INSERT(挿入)が実行されます。

ID 顧客名 フリガナ 郵便番号
A001 鈴木一郎 スズキイチロウ 5330011
A002 鈴木二郎 スズキジロウ 5330012
A003 鈴木三郎 スズキサブロウ 5330013
B001 田中一郎 タナカイチロウ 5340011
B002 田中二郎 タナカジロウ 5340012
B003 田中三郎 タナカサブロウ 5340013
C001 佐藤一郎 サトウイチロウ 5330011

 

最後まで読んで頂きありがとうございました^^

この投稿へのコメント

コメントはありません。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

この投稿へのトラックバック

トラックバックはありません。

トラックバック URL