SQLのIN句で指定できる値の個数

ここでは、ORACLE SQLのIN句を指定した場合に設定できる値の個数について紹介します。

select * from table1 a where a.col1 in (‘A’,’B’,’C’);

と言う風に、IN句に値を設定することがあると思います。

特にプログラムの中で、IN句の中を動的に作成して、SQLを実行するケースは良くあると思います。

ここで注意して頂きたいので、値の個数には、上限があります。IN句の値には、1000個までしか値を設定できません。

もし、仮に↓のように1000個以上の値を設定すると、SQLエラーとなります。
きっとプログラムだとEXCEPTIONが発生してABENDすると思いますので、注意してください。

select * from table1 a where a.col1 in (‘1′,’2′,’3’・・・’2000’);

もし、IN句の値を別のテーブルから取得しているのであれば、↓のように、SQLを1つにしてやることで回避することもできます。

select * from table1 a where a.col1 in (select b.col1 from table2 b);

もし、それでSQLが遅くなってしまう場合は、「SELECT文のSQLチューニング方法まとめ」を参考にチューニングしてみてください。

現場で使えるSQL第2版 Oracle 10 g・SQL Server 20 (DB magazine selection) [ 小野哲 ]

価格:2,376円
(2018/11/19 19:05時点)
感想(4件)