У меня есть таблица,SQL, пытаясь избавиться от большого IN cluase
Contacts: Contact_ID (int) ContactName (nvarchar)
Я дал список контактных идентификаторов, чтобы выбрать из. Как правило, я бы просто сделать
SELECT *
FROM Contacts
WHERE IN (List of contact ID)
Проблема заключается в том, что в списке контактных идентификаторов потенциально может получить очень большой, как 50k или более.
Итак, мой вопрос: есть ли способ иметь дело с большим списком идентификаторов контактов без использования предложения IN?
EDIT: Я использую сервер SQL. Запрос и идентификаторы контактов создаются во время выполнения и передаются в класс sqlCommand (C#) для выполнения.
использовать соединение между двумя таблицами и разрешать объединение INNER для устранения записей ... использовать коррелированный подзапрос и предложение «существует» (или подобное в зависимости от РСУБД) (существует *** обычно ***, а затем внутреннее соединение, за которым следует IN), так что RDBMS? и является ли Список идентификаторов контакта в таблице где-нибудь? (не уверен, что вы подразумеваете под «Учитывая список контактов». Вставьте «Список» в временную таблицу и используйте «существует», или внутреннее соединение ... но у этого есть накладные расходы ... чего вы пытаетесь достичь? Просто улучшенная читаемость ? – xQbert
Какая СУБД вы используете? Каждый оптимизатор ведет себя по-другому –
Не уверен, какие СУБД вы находитесь, но большинство из них позволит вам помещать эти ID в временную таблицу и присоединяться к временной таблице. Это, вероятно, будет быстрее. –