例: 単一のSQLリクエスト内の更新操作と挿入操作に対するMERGEの使用 - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQLデータ操作言語

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Published
2021年1月
Language
日本語
Last Update
2021-03-30
dita:mapPath
ja-JP/vnq1596660420420.ditamap
dita:ditavalPath
ja-JP/vnq1596660420420.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

MERGE文を使用して、単一のSQLリクエスト内で更新操作と挿入操作を実行することができます。MERGEでは、更新操作と挿入操作を個別に実行しなければならない事例とは異なり、1つのパスでインデックスと参照整合性の保守を実行できます。

例えば、次のテーブルを作成し、MERGEリクエストを使用してソース テーブルt2からターゲット テーブルt1への行の更新と挿入を実行するとします。

     USING (empno  INTEGER,     CREATE TABLE t1 (
       a1 INTEGER,
       b1 INTEGER,
       c1 INTEGER);

     CREATE TABLE t2 (
       a2 INTEGER,
       b2 INTEGER,
       c2 INTEGER);

     MERGE INTO t1
          USING t2
          ON a1=a2
          WHEN MATCHED THEN
              UPDATE
              SET b1=b2
          WHEN NOT MATCHED THEN
              INSERT (a2, b2, c2);

EXPLAINは、条件("OB.t1.a1 = OB.t2.a2")でのOB.t2からOB.t1への一致更新および不一致挿入によるマージを示します。

このMERGEリクエストは、次の意味的に同じ複文のUPDATE INSERTリクエストとしても記述できます。

     UPDATE t1
           FROM t2
           SET b1=b2
           WHERE a1=a2
           ;INSERT INTO t1
           SELECT a2, b2, c2
           FROM t2, t1
           WHERE NOT (a1=a2);

2つのEXPLAINレポートを比較すると、MERGEリクエストのほうが意味的に同じUPDATEとINSERTの複文リクエストよりも優れていることがわかります。

UPDATEとINSERTの複文リクエストでは、以下のステップが並列して実行されます。
  • OB.t2からOB.t1へのMERGE更新
  • OB.t2からのRETRIEVEステップ

次に、結合条件("OB.t1.a1 <> a2")によるOB.t1への結果のJOINステップがあります。