Выбор SQL из очень длинного списка значений - PullRequest
2 голосов
/ 10 октября 2019

Мне нужно выбрать на основе большого списка:

SELECT ... FROM tb WHERE tb.cl IN (?, ?, ?, ..................many)

Я не могу сделать это таким образом, потому что реализация драйвера ( Jaybird ) ограничивает запрос до 1500 параметров максимумТакже я не могу выбрать / загрузить все и отфильтровать внутри приложения, потому что недостаточно памяти.

Что мне делать?

Дополнительная информация

Я используюSpring Boot с Hibernate и репозиториями JPA, поэтому, если это можно сделать в JPQL или с использованием какой-либо другой техники, связанной с окружающей средой, это подойдет лучше.

Я на самом деле буду использовать ...WHERE tb.cl NOT IN..., если это будет иметь какое-либо значение.
Это похоже на EDI, я соединяю две разные базы данных, поэтому использование вложенного выбора не вариант.

1 Ответ

1 голос
/ 10 октября 2019

Один из вариантов - использовать временную таблицу и выполнять столько операций вставки в эту таблицу, сколько вам нужно. После этого вы можете использовать:

Select .. from tb where tb.cl in (select cl from myTempTable)

, а затем выполнить усечение для временной таблицы или удаление. Насколько я знаю, все ведущие реляционные базы данных устанавливают ограничение в предложении IN, если вы используете параметры. С другой стороны, использование временной таблицы поможет.

...