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,....)