2015年1月25日日曜日

ORA-01795: リストに指定できる式の最大数は1000です

先日、自社に帰社したら、別の現場の方から
「OracleではIN句が1000個までしか指定できないので、回避策は無いか」
といった相談を受けました。

たとえば、こんなSQLで考えてみました。
select bonus from salary
 where empno in (select empno from employee where prefecture = 'CHIBA');

このとき、千葉県の社員が1000人を超えるとORA-01795が発生します。


さて、どうやってSQLを書き変えましょうか。
IN句を書かずにこう書いてみます。

select bonus from salary,employee
 where employee.prefecture = 'CHIBA' and salary.empno = employee.empno;

EXIST句で書く方法もあります。

select bonus from salary
 where exists
 ( select empno from employee
   where prefecture = 'CHIBA'
   and salary.empno = employee.empno);

AccessでSQL実行してみましたが、問題無く動きました。
IN句とEXIST句の書き換えが難なくできるようになりたいものです。

0 件のコメント:

コメントを投稿