Вы, вероятно, хотите использовать для этого предикат SQL IN ( )
.
Вы бы хотели, чтобы это выглядело следующим образом:
WHERE post_code IN ('M2X','I5D','T8I','O0P','K6R',...)
Преобразование файла текстовых строк в этот формат можно выполнить на различных языках сценариев.Например, sed и awk:
sed -e "s/.*/'&'/" postal_codes.csv | awk 'BEGIN { ORS="," } { print }' | sed "s/,$//"
'M2X','I5D','T8I','O0P','K6R'
Если вы хотите, чтобы первые три символа ваших данных соответствовали почтовому коду, другими словами, как если бы они были префиксами, вы можете попробовать это:
WHERE LEFT(post_code, 3) IN ('M2X','I5D','T8I','O0P','K6R',...)
Недостатком является невозможность поиска по индексу.
Другой вариант - использовать сопоставление с шаблоном, которое будет использовать индекс при поиске по префиксу.Но это делает запрос довольно длинным:
WHERE post_code LIKE 'M2X%'
OR post_code LIKE 'I5D%'
OR post_code LIKE 'T8I%'
OR post_code LIKE 'O0P%'
OR post_code LIKE 'K6R%'
OR ...
Или вы можете загрузить набор из 300 почтовых кодов (с подстановочным знаком %
в конце) во временную таблицу и сделать это с помощью JOIN:
SELECT ...
FROM mytable JOIN tmp_post_codes
ON post_code LIKE post_code_pattern