Как написать MySQL-запрос, где A содержит ( "a" или "b" )

Я должен использовать этот формат where A operand B. A - поле; Я хочу, чтобы B был либо "текст 1", либо "текст 2", поэтому, если A имеет такие данные, как "text 1 texttext" или "texttext 2", запрос будет иметь результат.

Но как мне это написать? Поддерживает ли MySQL что-то вроде

where A contains ('text 1' OR 'text 2')? `

Ответы

Ответ 1

Два варианта:

  • Используйте ключевое слово LIKE, а также знаки процента в строке

    select * from table where field like '%a%' or field like '%b%'.
    

    (примечание: если ваша строка поиска содержит знаки процента, вам нужно их избежать)

  • Если вы ищете более сложную комбинацию строк, чем вы указали в своем примере, вы можете использовать регулярные выражения (regex):

    Подробнее о том, как их использовать, см. в руководстве по MySQL: http://dev.mysql.com/doc/refman/5.1/en/regexp.html

Из них использование LIKE является самым обычным решением - стандартным SQL и общим. Regex реже используется, но гораздо более мощный.

Обратите внимание, что независимо от того, какой вариант вы используете, вам необходимо знать о возможных последствиях для производительности. Поиск таких подстрок будет означать, что запрос должен будет сканировать всю таблицу. Если у вас большая таблица, это может привести к очень медленному запросу, и никакая индексация не поможет.

Если это проблема для вас, и вам придется искать одни и те же вещи снова и снова, вы можете сделать что-то вроде добавления поля флага в таблицу, которое указывает, что поле строки содержит соответствующие подстроки. Если вы сохраните этот флаг в обновленном состоянии, когда вы вставляете обновление в запись, вы можете просто запросить флаг, когда хотите выполнить поиск. Это можно проиндексировать и сделать ваш запрос намного быстрее. Стоит ли это делать, это зависит от вас, это будет зависеть от того, насколько плохо работает производительность LIKE.

Ответ 2

Вы можете написать свой запрос следующим образом:

SELECT * FROM MyTable WHERE (A LIKE '%text1%' OR A LIKE '%text2%')

% - это подстановочный знак, означающий, что он ищет все строки, где столбец А содержит либо text1, либо text2

Ответ 3

Я использовал большую часть времени LIKE, и он отлично работает. Мне просто нравится поделиться одним из моих последних впечатлений, когда я использовал функцию INSTR. Независимо от причин, побудивших меня рассмотреть эти варианты, важно то, что использование аналогично: instr (A, 'text 1') > 0 или instr (A, 'text 2') > 0 Другим вариантом может быть: (instr (A, 'текст 1') + instr (A, 'текст 2')) > 0

Я бы пошел с LIKE '% text1%' ИЛИ ​​LIKE '% text2%'... если не надеюсь, что этот другой вариант поможет