( Oracle ) 【解決】 比較演算子 IN句に1000件以上指定すると、エラーが発生
Oracleには、リストに式を最大1000件までしか書けないという制限がある為、
IN句には最大で1000件までしか指定できないみたい。
IN句の要素数が1000件を超えると「ORA-01795: リストに指定できる式の最大数は1000です。」というエラーが発生します。
そうゆうときは、IN句ではなく、EXISTS句で対応。
例)
製品情報が入っているproductテーブル
顧客情報が入っているuserテーブル
・product には 製品番号 product_id があり
・user には 購入商品番号 product_id_fk を持つ
・product_id_fkは1001件のレコードが格納されている場合
購入履歴の製品を調べる下記SQLはエラーとなる。
SELECT
*
FROM
product A
WHERE
A.product_id IN ( SELECT B.product_id_fk FROM user B )
これをEXISTS句で書き直すと
SELECT
*
FROM
product A
WHERE
EXISTS( SELECT 'X' FROM user B WHERE A.product_id = B.product_id_fk );
EXISTS の方が圧倒的に速く動作することからも、
EXISTSで表記する書き方で慣れておいたほうがいいのかも。