Простой вопрос. Хотите знать, если длинное предложение 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