Как вы используете ИЛИ НРАВИТСЯ в операторе выбора MySQL? - PullRequest
1 голос
/ 26 мая 2011

У меня проблемы с этим утверждением select:

Select * from table where row != '' and row2 like '%test%' or like '%test2%';

Часть "или как" не работает, я думаю, что я использую ее неправильно.

Ответы [ 4 ]

7 голосов
/ 26 мая 2011

Вы бы сделали что-то вроде этого:

SELECT * FROM table
WHERE row != '' AND (row2 like '%test%' OR row2 like '%test2%')

Каждый ИЛИ / И действует на одну вещь. Как уже отмечали другие, порядок операций важен. Вы должны сгруппировать выражения, используя (), чтобы они оценивались первыми.

1 голос
/ 26 мая 2011

Существует проблема приоритета оператора - используйте скобки для ее решения:

SELECT *
  FROM table
 WHERE row != '' 
   AND (row2 LIKE '%test%' OR row2 LIKE '%test2%');

Вы также пропустили второй 'row2' в условиях OR.

Конечно, второе условие LIKE в примере не будет возвращать никаких строк, которых нет в первой (поскольку каждая строка, содержащая «test2» также содержит «test»), но мы можем предположить, что это было слишком упрощением цели вопроса.

1 голос
/ 26 мая 2011

Вы пропускаете "row2" во втором, как, но и ваш запрос, как сейчас, работает следующим образом

Select * from table where row != '' and row2 like '%test%';
Select * from table where row2 like '%test2%';

Если вам это нужно, это нормально, но я полагаю, вы хотите, чтобы в обоих поисках строка была! = ""?

Если это так, то ваш запрос должен выглядеть следующим образом:

Select * from table where row != '' and (row2 like '%test%' or row2 like '%test2%');

обратите внимание на скобки.

0 голосов
/ 26 мая 2011

Где предложения связаны со столбцами строки в таблице, из которой вы запрашиваете, а не с самой «строкой». Таким образом, если вы имеете дело с простой таблицей клиентов, вы можете применять LIKE-запросы, например,

select 
      lastname,
      firstname,
      address
   from
      customers
   where
         firstname like 'Bill%'
      OR lastname like '%mar%'

вернет любые имена, в которых имя начинается с «Билла», независимо от того, чем оно заканчивается (через символ «%»)

OR

фамилия имеет значение «mar» в любом месте фамилии, например «Маркус», «Тамара», «Омар» ...

Каждое применяемое предложение "LIKE" основано на столбце, который вы хотите сравнить с .... Если вы хотите, чтобы несколько значений были проверены для одного столбца, вы должны будете писать его каждый раз ...

where
   firstname like 'Bill%'
   or firstname like 'John%'
   or firstname like '%any%'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...