17.05 - 重複行およびINSERT - Advanced SQL Engine - Teradata Database

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.05
Release Date
2021年1月
Content Type
プログラミング リファレンス
Publication ID
B035-1146-175K-JPN
Language
日本語 (日本)

挿入操作によって重複行が作成される場合、操作の結果はテーブルの定義によって異なります。フィールドまたは行の重複を調べる場合には、文字列にある末尾の空白は無視されます。

テーブル定義 重複行挿入アクション
MULTISET(固有制約なし) 挿入される
  • SET
  • MULTISET(固有制約あり)
挿入されない

要求元にエラーが返される

識別列テーブルに挿入する場合、これは列がWITH NO CYCLEと定義されている場合にのみ正しくなります。CYCLEを試行しようとすると、この場合、エラーが発生することがあります。重複行違反が報告される前に、システムは固有性違反などの他の理由でもエラーを返すことがあります。

重複行およびINSERT ... SELECT

SELECTサブクエリーを使用するINSERTが重複行を作成する場合、結果はテーブルの定義によって異なります。
  • 固有制約またはUNIQUEインデックスがテーブル上で定義されていない場合にのみ、MULTISETセットでは重複行が許可されます。
  • SETテーブルで重複行が許可されることは絶対にありません。

以下のテーブルは、重複行およびINSERT ... SELECTに対する制約を要約しています。

テーブルのタイプ 重複行
MULTISET(固有制約なし) 複合変更を行なうことができます。

挿入された重複行は、テーブル内に格納されます。

MULTISET(固有制約あり) 許可されません。要求元にエラー メッセージを返します。

以下の制約は、Vantageで固有とみなされます。

  • 固有プライマリ インデックス
  • 固有セカンダリ インデックス
  • プライマリ キー
  • UNIQUE列制約
  • GENERATED ALWAYS識別列制約

非テンポラル テーブルの場合、固有セカンダリ インデックス、プライマリ キーおよび固有制約はすべて固有セカンダリ インデックスとして内部実装されます。

USI、PK、および固有制約をテンポラル テーブルに実装する方法については、<Teradata Vantage™ - ANSIテンポラル テーブル サポート、B035-1186>と<Teradata Vantage™ - テンポラル テーブル サポート、B035-1182>を参照してください。

SET 許可されません。
  • ANSIセッション モードでは、システムはリクエストを拒否し、要求元にエラー メッセージを返します。

    固有性制約の違反などのその他のエラーが最初に起こる場合、システムは重複行メッセージではなく、そのエラーを要求元に返します。

  • Teradataセッション モードでは、データベースは以下を実行します。

    トランザクション内の重複行を拒否します。

    テーブルに重複していない行を挿入します。

    要求元にエラー メッセージを返しません。

Teradataセッション モードで、SAMPLE句を指定したINSERT … SELECTリクエストにおいて、行のセットを選択するソースがMULTISETテーブルで、それらを挿入するターゲットがSETテーブルの場合、サンプリングされた行セットに重複が含まれていると、ターゲットのSETテーブルに挿入される行数は、SAMPLE句で要求される数よりも少なくなる場合があります。

Teradataセッション モードでは、この条件は、SETテーブルが重複行の挿入を拒否するために生じます。この結果として、INSERT ... SELECT操作のINSERT部分では、固有の行だけがSETターゲット テーブルに挿入されます。結果として、ターゲット テーブルに挿入された行の数は、SAMPLE句に指定された数よりも少なくなる場合があります。

例えば、INSERT ... SELECTリクエストのSAMPLE句が10行のサンプル サイズを要求し、収集されたサンプル内にMULTISETソース テーブルからの重複行がある場合、システムは、サンプリングされた行をSETテーブルに挿入するときに重複インスタンスを拒否し、サンプル セットから固有の行だけを挿入します。言い換えれば、10行のサンプルをリクエストできるとしても、ターゲット テーブルに挿入される実際の行数は、サンプリングされた行セット内に重複行がある場合は10に満たない場合があるということです。このような状況が発生しても、データベースが警告または情報メッセージを返すことはありません。