есть колонки first_name и last_name (обе varchar). Мне хочется написать запрос, который для набора ФИО найдёт всех пользователей.
Вижу два варианта:
1) Создать функциональный индекс на concat(first_name, last_name) и искать соответственно where concat() in (...);
2) Строить большой запрос со множеством OR'ов и AND'ов: (first_name=$1 AND last_name=$2) OR (first_name=3 AND last_name=4) OR ...;
Что из этого разумнее и что из этого оптимальнее?
where (first_name, last_name) = ANY ...
А почему не просто: SELECT * FROM ... WHERE (first_name, last_name) IN (($1, $2), ($3, $4), ($5, $6)) ?
Если у вас api, то скорее всего оно получает список в JSON, ну так передавайте как параметр, а в запросе фильтруйте по этим значениям.
Обсуждают сегодня