Draconian: Почему? У людей могут совпадать номера паспортов, но при этом будут разные серии. Это же применимо и в обратном порядке: совпадают серии, но при этом разные номера.
Draconian: К сожалению, паспортные данные не являются первичным ключом. Есть пары значений номер + серия. В таблице они хранятся в разных полях, причём значения эти не уникальные. Нужно выбрать все записи, где совпадают и номер, и серия.
Вот и получается, что пока кроме решения "в лоб" (слепить все пары через OR) других вариантов не нашёл.
Выборка идёт по паспортным данным, а именно серия паспорта + номер, так что заменить условие, увы, нет возможности. Данные заранее подготовлены, поэтому и был большой соблазн просто передать ORM в качестве параметра массив данных и получить ответ.
Результатом выборки будет где-то 10к строк. Дёргать в цикле базу совсем не вариант, отвалится по времени. Как вариант можно слепить все условия запроса через OR, но мне казалось, что должно существовать более элегантное решение.