例: ON句の条件は、プライマリ インデックスとパーティション列の等価制約とAND付けされなければならない - Teradata Database - Teradata Vantage NewSQL Engine - 例: ON句の条件は、プライマリ インデックスとパーティション列の等価制約とAND付けされなければならない、MERGEリクエスト

Teradata Vantage™ SQLデータ操作言語

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/fbo1512081269404.ditamap
dita:ditavalPath
ja-JP/fbo1512081269404.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

次の例では、MERGEリクエストのON句条件の適切な指定と不適切な指定を示しています。

次の2つのテーブル定義について考えてみましょう。以下の例では、t1がターゲット リレーションで、t2がソース リレーションとして使用されます。

     CREATE TABLE t1 (
       a1 INTEGER,
       b1 INTEGER,
       c1 INTEGER)
     PRIMARY INDEX (a1);

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

次の例は、プライマリ インデックスの等価制約a1=a2がリクエストの他の指定条件b1=b2とAND付けされているので正しい例です。

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

次の例は、プライマリ インデックスの等価制約a1=a2がリクエストの他の指定条件c1+c2=1 OR b1+b2=1とAND付けされているので正しい例です。

セカンダリ条件は内部で論理和で結ばれていますが、この条件の評価結果は、プライマリ インデックスの条件とAND付けされます。

     MERGE INTO t1
     USING t2
       ON a1=a2 AND (c1+c2=1 OR b1+b2=1)
     WHEN MATCHED THEN
       UPDATE SET c1=c2;

次の例は有効ではありません。プライマリ インデックスの等価制約a1=a2がリクエストの他の指定条件c1=c2とOR付けされているので、このリクエストはアボートされ、要求元にエラー メッセージが返されます。

プライマリ インデックスの等価制約、およびターゲット テーブルにパーティション プライマリ インデックスがある場合はパーティション列の等価制約も、ON句に指定する他の条件とAND付けする必要があります。

     MERGE INTO t1
     USING t2
       ON a1=a2 OR b1=b2
     WHEN MATCHED THEN
       UPDATE SET c1=c2;