2011-05-26 106 views
1

我有麻烦与此select语句:如何在mysql select语句中使用OR LIKE?

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

的“或类似的”部分不工作,我猜我使用它不正确。

+0

嘿戴夫我编辑了你的问题的PHP和编程语言标签,因为它只是关于MySQL。 – yannis 2011-05-26 20:21:23

回答

7

你会做这样的事情:

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

每个或/与在一件事情上进行操作。正如其他人所指出的那样,操作顺序很重要。您应该使用()对表达式进行分组,以便首先对其进行评估。

+0

谢谢vcsjones,作品 – Dave 2011-05-26 19:33:34

+0

但他的问题有一个缺失的条件?我正在谈论'row!='''条件。 – RRStoyanov 2011-05-26 19:36:23

+0

@RRStoyanov这只是一个如何在同一列上做两个喜欢的例子。我会更新答案以包含'row!='''条件。 – vcsjones 2011-05-26 19:38:29

0

Where子句与您正在查询的表中某行的列关联,而不是“行”本身。所以,如果处理一个简单的客户表,您可以应用之类的查询像

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

将返回其中第一个名字会专门与“条例”启动任何名字,无论是什么结尾(通过“% “通配符)

OR

姓氏的值为‘三月’中的最后名称的任何地方,如‘马库斯’,‘塔玛拉’,‘奥马尔’......

每个” LIKE “适用的条款是基于你有兴趣再次比较的专栏牛逼....如果你想为你每次都要写一列测试多个值...

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

你错过第二个像“2行”,而且您的查询像现在工作这样

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%'); 

通知括号。

1

有一个运算符优先级的问题 - 使用括号来解决这个问题:

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

你也缺少在逻辑与的条件,第二个“2行”。

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