values operador not multiple sql oracle

operador - using sql



LĂ­mite de elemento SQL IN Clause 1000 (4)

De otra manera:

SELECT COL1, COL2, COL3 FROM YOUR_TABLE WHERE 1=1 AND COL2 IN ( SELECT VAL1 as FAKE FROM DUAL UNION SELECT VAL2 as FAKE FROM DUAL UNION SELECT VAL3 as FAKE FROM DUAL --... )

Es posible poner más de 1000 elementos en la cláusula SQL IN? Hemos estado teniendo problemas con nuestra base de datos Oracle que no puede manejarlo.

En caso afirmativo, ¿cómo colocamos más de 1000 elementos en la cláusula SQL IN?

Si no, ¿qué más puedo hacer?


Debe transformar las cláusulas IN en cláusulas INNER JOIN.

Puede transformar una consulta como esta

SELECT foo FROM bar WHERE bar.stuff IN (SELECT stuff FROM asdf)

en una consulta como esta otra.

SELECT b.foo FROM ( SELECT DISTINCT stuff FROM asdf ) a JOIN bar b ON b.stuff = a.stuff

También ganarás mucho rendimiento


Hay otra solución para esto que no se menciona en ninguna de las otras respuestas (u otras preguntas respondidas):

Cualquier enunciado como x in (1,2,3) puede reescribirse como (1,x) in ((1,1), (1,2), (1,3)) y el límite de 1000 elementos ya no aplicar. Probé con un índice en x y el plan de explicación aún informa que Oracle está usando un predicado de acceso y escaneo de rango.


Podemos tener más de una declaración "IN" para la misma variable.

Por ejemplo:

select val from table where val in (1,2,3,...) or val in (7,8,9,....)