サブクエリー (INSERT ... SELECTリクエストと呼ばれる)を使用するINSERT文は、次の点で単純なINSERTとは異なります。多くの行を単一の操作で挿入できるということと、行の値を複数のテーブルから持ってくることができることです。
問合わせ指定は、常にFROM table_name句を伴っていなければなりません。
さらに、次の条件が存在している場合、サブクエリーを含むINSERTリクエストで列名のリストを定義する必要があります。
- 問合わせ指定の列の数が挿入先のテーブルに含まれる列の数と異なる。
- 問合わせ指定の列の順序が挿入先のテーブルに定義された列の順序と異なる。
SUBQUERYのあるINSERT ... SELECTの使用
SELECTがサブクエリーである場合、INSERT ... SELECTリクエストのSELECTコンポーネントにORDER BY句を指定することはできません。
INSERTリクエストでのスカラーSUBQUERYの使用
INSERTおよびINSERT ... SELECTリクエストにスカラー サブクエリーを指定する場合には、次のルールと制限が適用されます。
- スカラー サブクエリーは、パラメータ化された値として、単純なINSERTリクエストの値リストに指定することができます。ただし、Teradata Databaseでは、そのスカラー サブクエリーを常に非相関スカラー サブクエリーとして解釈します。例: スカラー サブクエリーを使用したINSERTを参照してください。
- 単純なINSERTリクエストで識別列に割当てられた値リストの値として、非相関スカラー サブクエリーを指定することはできません。
- スカラー サブクエリーを使用したINSERTリクエストを、トリガー本体に指定することができます。
ただし、スカラー サブクエリーを使用した単純なINSERTリクエストを、行トリガー本体の値リストに指定することはできません。
- INSERT ... SELECTリクエストのSELECT構成要素に、スカラー サブクエリーを指定できます。
- Teradata Databaseでは、行トリガー内でINSERT ... SELECTのSELECT構成要素に指定した非相関スカラー サブクエリーを、パラメータ化された値としてではなく、単一列の単一行スプールとして処理します。