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が実行されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
MERGE INTO CUSTOMERS AS A --登録先 USING ( --登録元データ SELECT ID, 顧客名, フリガナ, 郵便番号 from CUSTOMERS2 ) AS B ON ( --結合条件 A.ID = B.ID ) WHEN MATCHED THEN --存在する場合 UPDATE SET A.ID = B.ID, A.顧客名 = B.顧客名, A.フリガナ = B.フリガナ, A.郵便番号 = B.郵便番号 WHEN NOT MATCHED THEN --存在しない場合 INSERT (ID, 顧客名, フリガナ, 郵便番号) VALUES ( B.ID, B.顧客名, B.フリガナ, B.郵便番号 ) ; |
例: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 |
最後まで読んで頂きありがとうございました^^
この投稿へのトラックバック
トラックバックはありません。
- トラックバック URL
この投稿へのコメント