你如何在mysql select语句中使用OR LIKE?

时间:2011-05-26 19:29:03

标签: mysql sql database

我在使用这个选择语句时遇到了问题:

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

“或者喜欢”部分不起作用,我猜我正在使用它。

4 个答案:

答案 0 :(得分:7)

你会做这样的事情:

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

每个OR / AND都在一件事上运作。正如其他人所指出的那样,运营秩序很重要。您应该使用()对表达式进行分组,以便首先对它们进行评估。

答案 1 :(得分:1)

你错过了第二个“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%');

注意括号。

答案 2 :(得分:1)

存在运算符优先级问题 - 使用括号来解决它:

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

你也错过了OR'd条件下的第二个'row2'。

当然,示例中的第二个LIKE条件不会返回第一个没有的行(因为包含'test2'的每一行也包含'test'),但是我们可以假设这是一个过度简化的行问题的目的。

答案 3 :(得分:0)

where子句与您要查询的表中的行的列相关联,而不是“行”本身。因此,如果处理一个简单的客户表,您可以应用类似

的LIKE查询
select 
      lastname,
      firstname,
      address
   from
      customers
   where
         firstname like 'Bill%'
      OR lastname like '%mar%'

将返回任何名称将以“Bill”明确地以“Bill”开头的名称,而不管其结尾(通过“%”通配符)

OR

姓氏在姓氏的任何地方都有值“mar”,例如“Marcus”,“Tamara”,“Omar”......

应用的每个“LIKE”子句都基于您有兴趣与之比较的列....如果您想为单个列测试多个值,则每次都必须编写它...

where
   firstname like 'Bill%'
   or firstname like 'John%'
   or firstname like '%any%'