В MySQL
с MyISAM
, вы можете создать FULLTEXT
индекс
CREATE FULLTEXT INDEX fx_customeraddresses_123 ON FIN_LIVE.CUSTOMER_ADDRESSES (SYS_ADDRESS_1, SYS_ADDRESS_2, SYS_ADDRESS_3)
и выдает этот запрос:
SELECT *
FROM FIN_LIVE.CUSTOMER_ADDRESSES
WHERE MATCH(SYS_ADDRESS_1, SYS_ADDRESS_2, SYS_ADDRESS_3) AGAINST ('+data')
, который возвращает все записи со словом data
в любом из полей.
Вы даже можете запросить его без индекса:
SELECT *
FROM FIN_LIVE.CUSTOMER_ADDRESSES
WHERE MATCH(SYS_ADDRESS_1, SYS_ADDRESS_2, SYS_ADDRESS_3) AGAINST ('+data' IN BOOLEAN MODE)
, но это будет гораздо медленнее.
Если вы ищете точных матч в любом из трех полей, вы можете использовать следующий синтаксис:
SELECT *
FROM FIN_LIVE.CUSTOMER_ADDRESSES
WHERE 'data' IN (SYS_ADDRESS_1, SYS_ADDRESS_2, SYS_ADDRESS_3)
(работает во всех основных базах данных).
Почему вы не хотите, И/ИЛИ заявление? –
@ Тони: Я понимаю, что я не хочу использовать 'ИЛИ' 'ы, они могут быть дорогими. –
Это отдельные строки адреса? .. возможно, вы хотели бы CONCAT_WS() поля адреса и сравнить их с данными. Примеры того, как выглядят ваши данные, очень помогли бы людям здесь дать вам самые полезные и точные советы. – JAL