каков верхний предел для предиката WHERE IN в DB2.
Например:
выберите зарплату у сотрудника, где empid в (1,2,3,4...N)
каков верхний предел для предиката WHERE IN в DB2.
Например:
выберите зарплату у сотрудника, где empid в (1,2,3,4...N)
Ограничение AS/400 составляет около 1000, исходя из ошибок, которые мы получаем, когда превышаем это значение. Мы разбиваем запросы на несколько небольших запросов, чтобы исправить наше устаревшее приложение JEE.
Иногда, если вам нужно задать вопрос, вы, вероятно, делаете это неправильно :-)
Если вас беспокоит ограничение, подумайте о том, чтобы поместить значения во временную таблицу, а затем просто соединить таблицы, чтобы получить результат.
Что касается конкретных ограничений, то они почти наверняка будут зависеть от того, какую DB2 вы используете: LUW, z/OS, iSeries и т. д. Он также может различаться в зависимости от версии. Я видел в сети вопросы о том, что DB2 отклоняет более тысячи записей, но что касается платформы/версии, я не могу сказать.
Лучше всего просто протестировать любую версию, которую вы используете, чтобы увидеть, когда вы достигнете предела. IBM, как правило, не стремится публиковать подобные ограничения, полагая вместо этого, что вы сделаете разумную вещь и избежите слишком многих (не в последнюю очередь потому, что для механизма оптимизации почти невозможно выбрать достойный путь выполнения для произвольных значений).
Для z/OS IBM устанавливает следующие ограничения, но нет никаких указаний относительно предложения IN:
Используйте оператор соединения, когда достигаются пределы предложения in. Это не имеет предела для всех намерений и целей.
select salary from employee join mytable on empid = id.
upper limit
, если возможен какой-либо ответ. Если это означает максимальное количество значений, ответ может отличаться от максимальной длины предиката. У вас может быть тысяча значений CHAR(3) в один раз и сотня значений CHAR(30) в другой раз, и вы получите разные результаты. - person user2338816   schedule 05.09.2014