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);