“UPDATE OR INSERT”は、MATCHING句の列の値と一致するレコードがあればUPDATE、なければINSERTします。
■Primary Keyがある場合
Primary Keyがある場合は、MATCHING句を使用しなくても自動的にPrimary Keyが使用されます。
CREATE TABLE "CLASSMATE"
(
"ID" INTEGER PRIMARY KEY,
"NAME" VARCHAR(10),
"CLASS" INTEGER,
"SCORE" INTEGER
);
INSERT INTO "CLASSMATE" ("ID", "NAME", "CLASS", "SCORE")
VALUES (1, '野比 のび太', 1, 20);
ID | NAME | CLASS | SCORE |
---|---|---|---|
1 | 野比 のび太 | 1 | 20 |
ID=2のレコードに値を設定します。
該当するレコードがないため、INSERTされます。
update or insert into CLASSMATE (ID, NAME, CLASS, SCORE)
values (2, '源 静香', 2, 80)
ID | NAME | CLASS | SCORE |
---|---|---|---|
1 | 野比 のび太 | 1 | 20 |
2 | 源 静香 | 2 | 80 |
ID=2のレコードに値を設定します。
該当するレコードがあるため、UPDATEされます。
update or insert into CLASSMATE (ID, NAME, CLASS, SCORE)
values (2, '出木杉 英才', 2, 100)
ID | NAME | CLASS | SCORE |
---|---|---|---|
1 | 野比 のび太 | 1 | 20 |
2 | 出木杉 英才 | 2 | 100 |
■Primary Keyがない場合
Primary Keyがある場合は、MATCHING句でレコードを指定します。
テストデータの作成
CREATE TABLE "CLASSMATE"
(
"NAME" VARCHAR(10),
"CLASS" INTEGER,
"SCORE" INTEGER
);
INSERT INTO "CLASSMATE" ("NAME", "CLASS", "SCORE")
VALUES ('野比 のび太', 1, 20);
NAME | CLASS | SCORE |
---|---|---|
野比 のび太 | 1 | 20 |
NAME=’源 静香’のレコードに値を設定します。
該当するレコードがないため、INSERTされます。
update or insert into CLASSMATE (NAME, CLASS, SCORE)
values ('源 静香', 2, 80)
matching(NAME)
NAME | CLASS | SCORE |
---|---|---|
野比 のび太 | 1 | 20 |
源 静香 | 2 | 80 |
NAME=’野比 のび太’のレコードに値を設定します。
該当するレコードがあるため、UPDATEされます。
update or insert into CLASSMATE (NAME, CLASS, SCORE)
values ('野比 のび太', 1, 30)
matching(NAME)
NAME | CLASS | SCORE |
---|---|---|
野比 のび太 | 1 | 30 |
源 静香 | 2 | 80 |