Можно добавить более 1000 элементов в предложение SQL IN? У нас возникли проблемы с тем, что наша база данных Oracle не справляется с этим.
ЕСЛИ да, как мы помещаем более 1000 элементов в предложение SQL IN?
ЕСЛИ нет, что еще я могу сделать?
Ответ 1
Вы должны преобразовать предложения IN в предложения INNER JOIN.
Вы можете преобразовать запрос, подобный этому
SELECT foo
FROM bar
WHERE bar.stuff IN
(SELECT stuff FROM asdf)
в запросе, подобном этому другому.
SELECT b.foo
FROM (
SELECT DISTINCT stuff
FROM asdf ) a
JOIN bar b
ON b.stuff = a.stuff
Вы также получите большую производительность
Ответ 2
Там есть еще одно обходное решение, которое не упоминается ни в одном из других ответов (или других ответов на вопросы):
Любой оператор, такой как x in (1,2,3), может быть переписан как (1,x) in ((1,1), (1,2), (1,3)), а ограничение 1000 элементов больше не будет применяться. Я тестировал с индексом x и объяснял, что план все еще сообщает, что Oracle использует предикат доступа и сканирование диапазона.
Ответ 3
Мы можем иметь более одного оператора "IN" для той же переменной.
Для ex:
select val
from table
where val in (1,2,3,...)
or
val in (7,8,9,....)
Ответ 4
Другой способ:
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
--...
)