Как сделать OR для двух операторов LIKE?
Я столкнулся с проблемой при выполнении SQL-запросов. Я попробовал использовать следующие два выражения:
SELECT col FROM db.tbl WHERE col (LIKE 'str1' OR LIKE 'str2') AND col2 = num
— на этом этапе возникает ошибка синтаксиса.SELECT col FROM db.tbl WHERE page LIKE ('str1' OR 'str2') AND col2 = num
— в результате выполнения этого запроса я получаю сообщение "Truncated incorrect DOUBLE value: str1" и "Truncated incorrect DOUBLE value: str2" для, как мне кажется, каждого результата. Однако ни один результат не возвращается.
Я думал, что один из этих запросов сработает, но, похоже, оба не работают. Кто-нибудь может помочь понять, в чем ошибка?
5 ответ(ов)
Ваш SQL-запрос выбирает значения из столбца col
таблицы tbl
базы данных db
, где значение в столбце col
соответствует либо строке str1
, либо строке str2
, а также значение в столбце col2
равно num
.
Вот общая структура вашего запроса:
SELECT col
FROM db.tbl
WHERE (col LIKE 'str1' OR col LIKE 'str2')
AND col2 = num
Если у вас есть дополнительные вопросы по этому запросу или вы хотите уточнить его, не стесняйтесь спрашивать!
В вашем SQL-запросе вы используете оператор LIKE
с подстановочными знаками %
в начале и в конце строк, что позволяет искать подстроки в значениях столбца col
. Это правильно, если вы хотите найти строки, которые содержат str1
или str2
в любом месте.
Ваш запрос выглядит следующим образом:
SELECT col FROM db.tbl WHERE (col LIKE '%str1%' OR col LIKE '%str2%') AND col2 = num
Таким образом, условие LIKE '%str1%'
будет искать все записи, где col
содержит str1
как подстроку, а условие LIKE '%str2%'
— записи, содержащие str2
. Оба условия соединены оператором OR
, что означает, что если выполняется хотя бы одно из них, то запись будет возвращена, при условии, что также выполняется условие col2 = num
.
Использование %
в начале и в конце строки позволяет выполнить поиск подстроки независимо от того, где она расположена в значении col
.
Я думаю, вам нужно использовать условие WHERE ((page LIKE 'str1') OR (page LIKE 'str2'))
. Это позволит вам выбрать записи, где столбец page
содержит либо str1
, либо str2
.
Оператор "OR" применяется к выражениям. Выражения "LIKE 'str1'" и "LIKE 'str2'" не являются валидными выражениями, поскольку оператор "LIKE" требует наличия как левой, так и правой части.
page LIKE ('str1' OR 'str2')
в первую очередь попробует объединить 'str1' и 'str2' с помощью оператора OR, результатом чего будет значение TRUE. Затем будет произведена попытка оценить page LIKE TRUE
, в результате чего возникнет ошибка.
Я полагаю, что вы хотите выполнить следующий запрос:
SELECT col FROM db.tbl WHERE col LIKE '%str[12]%' AND col2 = num
Этот запрос найдёт все случаи, где (col соответствует шаблону %str1% или %str2%) И col2 равно num.
SQL: выбрать только строки с максимальным значением в столбце
Когда использовать одинарные кавычки, двойные кавычки и обратные кавычки в MySQL
Удаление с использованием JOIN в MySQL
MySQL 1062 - Дубликат значения '0' для ключа 'PRIMARY'
java.sql.SQLException: Не найден подходящий драйвер для jdbc:mysql://localhost:3306/dbname