私がMySqlで気に入っている非常に便利なステートメントはREPLACE INTO table
、「存在する場合は値を置換するORテーブルに挿入する場合は存在しない」です。
db2 のドキュメントは REPLACE
、文字列のみを操作する関数のためのものであるため、その意味はありません。
db2に同等のものはありますか? 今、キーワードも探していIF EXSTS/IF NOT EXIST
ます。
DB2 は SQL 標準MERGE
ステートメントを使用して、基本的に同じことを行います。構文は異なります。
MERGE INTO table_to_upsert AS tab
USING (VALUES
(1, 2, 3),
(4, 5, 6),
(7, 8, 9)
-- more rows
) AS merge (C1, C2, C3)
ON tab.key_to_match = merge.key_to_match
WHEN MATCHED THEN
UPDATE SET tab.C1 = merge.C1,
tab.C2 = merge.C2,
tab.C3 = merge.C3
WHEN NOT MATCHED THEN
INSERT (C1, C2, C3)
VALUES (merge.C1, merge.C2, merge.C3)
探している DB2 関数は MERGE です
CREATE TABLE FOO ( ID INT, TITLE VARCHAR(500), VALUE );
CREATE TABLE BAR ( ID INT, TITLE VARCHAR(500), VALUE );
INSERT INTO FOO VALUES (1, 'BAR', 5.0);
INSERT INTO BAR VALUES (1, 'CCC', 3.0);
INSERT INTO BAR VALUES (2, 'DDD', 1.0);
MERGE INTO FOO AS F
USING BAR AS B
ON (F.ID = B.ID) WHEN MATCHED THEN UPDATE SET TITLE = B.TITLE, VALUE = F.VALUE - B.VALUE
WHEN NOT MATCHED THEN INSERT VALUES(B.ID, B.TITLE, B.VALUE);
SELECT ID, TITLE, VALUE FROM FOO;
1 CCC 2.0
2 DDD 1.0
DeveloperWorks からのこの説明は、いくつかのギャップを埋めます。