挿入操作によって重複行が作成される場合、操作の結果はテーブルの定義によって異なります。フィールドまたは行の重複を調べる場合には、文字列にある末尾の空白は無視されます。
テーブル定義 | 重複行挿入アクション |
---|---|
MULTISET(固有制約なし) | 挿入される |
|
挿入されない 要求元にエラーが返される 識別列テーブルに挿入する場合、これは列がWITH NO CYCLEと定義されている場合にのみ正しくなります。CYCLEを試行しようとすると、この場合、エラーが発生することがあります。重複行違反が報告される前に、システムは固有性違反などの他の理由でもエラーを返すことがあります。 |
重複行およびINSERT ... SELECT
- 固有制約またはUNIQUEインデックスがテーブル上で定義されていない場合にのみ、MULTISETセットでは重複行が許可されます。
- SETテーブルで重複行が許可されることは絶対にありません。
以下のテーブルは、重複行およびINSERT ... SELECTに対する制約を要約しています。
テーブルのタイプ | 重複行 |
---|---|
MULTISET(固有制約なし) | 複合変更を行なうことができます。 挿入された重複行は、テーブル内に格納されます。 |
MULTISET(固有制約あり) | 許可されません。要求元にエラー メッセージを返します。 以下の制約は、Vantageで固有とみなされます。
非テンポラル テーブルの場合、固有セカンダリ インデックス、プライマリ キーおよび固有制約はすべて固有セカンダリ インデックスとして内部実装されます。 USI、PK、および固有制約をテンポラル テーブルに実装する方法については、<Teradata Vantage™ - ANSIテンポラル テーブル サポート、B035-1186>と<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>を参照してください。 |
SET | 許可されません。
|
Teradataセッション モードで、SAMPLE句を指定したINSERT … SELECTリクエストにおいて、行のセットを選択するソースがMULTISETテーブルで、それらを挿入するターゲットがSETテーブルの場合、サンプリングされた行セットに重複が含まれていると、ターゲットのSETテーブルに挿入される行数は、SAMPLE句で要求される数よりも少なくなる場合があります。
Teradataセッション モードでは、この条件は、SETテーブルが重複行の挿入を拒否するために生じます。この結果として、INSERT ... SELECT操作のINSERT部分では、固有の行だけがSETターゲット テーブルに挿入されます。結果として、ターゲット テーブルに挿入された行の数は、SAMPLE句に指定された数よりも少なくなる場合があります。
例えば、INSERT ... SELECTリクエストのSAMPLE句が10行のサンプル サイズを要求し、収集されたサンプル内にMULTISETソース テーブルからの重複行がある場合、システムは、サンプリングされた行をSETテーブルに挿入するときに重複インスタンスを拒否し、サンプル セットから固有の行だけを挿入します。言い換えれば、10行のサンプルをリクエストできるとしても、ターゲット テーブルに挿入される実際の行数は、サンプリングされた行セット内に重複行がある場合は10に満たない場合があるということです。このような状況が発生しても、データベースが警告または情報メッセージを返すことはありません。