« Firebird Embedded Serverの使い方 | メイン | CDNでDelphiのUnicode対応に関する記事が公開されています »

MERGE文の復習

MERGE文の復習。Firebird2.1を使用しました。

サンプルデータの作成

CREATE TABLE employee (
  id INTEGER NOT NULL,
  name VARCHAR(1024) NOT NULL,
  PRIMARY KEY (id)
);
CREATE TABLE employee_temp (
  id INTEGER NOT NULL,
  name VARCHAR(1024) NOT NULL,
  PRIMARY KEY (id)
);

INSERT INTO employee (id, name) VALUES (1, 'Alice');
INSERT INTO employee (id, name) VALUES (2, 'Bob');
INSERT INTO employee (id, name) VALUES (3, 'Carol');

INSERT INTO employee_temp (id, name) VALUES (2, 'Becky');
INSERT INTO employee_temp (id, name) VALUES (4, 'Dave');

employeeテーブル

id name
 1 Alice
 2 Bob
 3 Carol

employee_tempテーブル

id name
 2 Becky
 4 Dave

employee_tempテーブルのデータをemployeeテーブルにマージする。

employeeテーブルとemployee_tempテーブルの両方にid=2のレコードがあるので、employeeテーブルのid=2のレコードは更新します。

id=4のレコードはemployee_tempテーブルにだけあるので、employeeテーブルに追加します。

MERGE INTO employee USING employee_temp ON (employee.id = employee_temp.id)
WHEN MATCHED THEN
  UPDATE SET employee.name = employee_temp.name
WHEN NOT MATCHED THEN
  INSERT (id, name) VALUES (employee_temp.id, employee_temp.name)

結果は、

id name
 1 Alice
 2 Becky
 3 Carol
 4 Dave

employeeテーブルに存在しないレコードだけ追加したい場合は、「WHEN MATCHED THEN」を使わず、「WHEN NOT MATCHED THEN」だけを使用します。

MERGE INTO employee USING employee_temp ON (employee.id = employee_temp.id)
WHEN NOT MATCHED THEN
  INSERT (id, name) VALUES (employee_temp.id, employee_temp.name)

結果は、

id name
 1 Alice
 2 Bob
 3 Carol
 4 Dave

トラックバック

このエントリーのトラックバックURL:
http://www.gesource.jp/mt/mt-tb.cgi/812

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

About

2008年09月15日 14:27に投稿されたエントリーのページです。

ひとつ前の投稿は「Firebird Embedded Serverの使い方」です。

次の投稿は「CDNでDelphiのUnicode対応に関する記事が公開されています」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.35