問合わせに大きなNOT IN句を使用すると失敗することがある - Advanced SQL Engine - Teradata Database

Teradata Vantage™ - SQL関数、式、および述部

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

INまたはNOT IN句に多数の引数を含む問合わせは、失敗することがあります。

例えば、IN句に16000の引数を使った次の問合わせを実行して、失敗したとします。

   SELECT MAX(emp_num)
   FROM employee
   WHERE emp_num IN(1,2,7,8,...,121347);

この問題が起きたときの回避策は、IN句の中の引数を含めた一時テーブルまたは揮発性テーブルを使用して問合わせを書き直すことです。

以下の文を使用すると同じ選択を行なうことができますが、失敗は起こりません。

   CREATE VOLATILE TABLE temp_IN_values (
    in_value INTEGER) ON COMMIT PRESERVE ROWS;
   
   INSERT INTO temp_IN_values
   SELECT emp_num
   FROM table_with_emp_num_values;

新しい問合わせは、次のようになります。

   SELECT MAX(emp_num)
   FROM employee AS e JOIN temp_IN_values AS en
   ON (e.emp_num = en.in_value);