Простой вопрос. Хотите знать, является ли длинное предложение IN запахом кода? Я действительно не знаю, как это оправдать. Я не могу понять, почему он пахнет иначе, чем я думаю.
select
name,
code,
capital,
population,
flower,
bird
from us_states
where
code in
('NJ', 'NY', 'PA', 'CA', 'AL', 'AK', 'AZ',
'IL', 'IN', 'KY', 'KS', 'DC', 'MD', 'MA')
Как база данных обычно реализует такой поиск? Сделан ли временный стол и присоединен ли к нему? Или это просто развернутая последовательность логических операций ИЛИ?
Такое ощущение, что это должно было быть соединение ...
Я не говорю, что все предложения IN плохие. Иногда ничего не поделаешь. Но бывают случаи (особенно чем дольше они становятся), когда набор элементов, с которыми вы сопоставляете, действительно откуда-то берется. И не следует ли вместо этого объединить это?
Стоит ли создавать (на уровне приложения) временную таблицу, в которой есть все элементы, по которым вы хотите выполнять поиск, а затем выполнять реальное соединение против нее?
select u.*
from us_states u
join #chosen_states t
on u.code = t.code