0

'LIKE ('%this%' ИЛИ '%that%') и что-то=другое' не работает

14

Я столкнулся с проблемой при выполнении выборки данных, где пытаюсь найти строки, соответствующие нескольким паттернам одновременно.

Вот мой запрос:

LIKE ('%this%' or '%that%') and something=else

Однако, он возвращает ноль результатов.

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

LIKE '%this%' and something=else

и

LIKE '%that%' and something=else

Они оба возвращают результаты.

Вопрос в том: возможно ли получить все результаты в одном запросе? И как будет обрабатываться ситуация, если строка соответствует обоим паттернам?

5 ответ(ов)

1

К сожалению, вы не можете использовать этот синтаксис в SQL.

Попробуйте следующий вариант:

(column1 LIKE '%this%' OR column1 LIKE '%that%') AND something = else

Обратите внимание на использование скобок! Они необходимы вокруг выражения с OR.

Без скобок выражение будет интерпретировано как A OR (B AND C), что не даст вам ожидаемых результатов.

0

Вместо использования LIKE, используйте REGEXP. Например:

SELECT * FROM table WHERE value REGEXP 'THIS|THAT';

Вот несколько примеров использования REGEXP в MySQL:

mysql> SELECT 'pi' REGEXP 'pi|apa';                     -- 1
mysql> SELECT 'axe' REGEXP 'pi|apa';                    -- 0
mysql> SELECT 'apa' REGEXP 'pi|apa';                    -- 1
mysql> SELECT 'apa' REGEXP '^(pi|apa)$';                -- 1
mysql> SELECT 'pi' REGEXP '^(pi|apa)$';                 -- 1
mysql> SELECT 'pix' REGEXP '^(pi|apa)$';                -- 0

Как видно из примеров, REGEXP позволяет выполнять более сложные проверки по сравнению с LIKE, включая использование регулярных выражений для поиска. Подробности можно найти в документации MySQL: REGEXP Documentation.

0

Попробуйте что-то вроде:

WHERE (column LIKE '%this%' OR column LIKE '%that%') AND something = else

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

0

Чтобы разнести условия LIKE на два отдельных выражения, вы можете переписать ваш SQL-запрос следующим образом:

(fieldname1 LIKE '%this%') OR (fieldname1 LIKE '%that%') AND something = else

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

0

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

Примерно так:

WITH FilteredResults AS (
    SELECT * 
    FROM <blah> 
    WHERE (fieldA LIKE '%THIS%' OR fieldA LIKE '%THAT%')
)
SELECT * 
FROM FilteredResults 
WHERE something = else;

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь