在mysql select语句中如何使用或喜欢?

在mysql select语句中如何使用或喜欢?,mysql,sql,database,Mysql,Sql,Database,我对这个select语句有问题: Select * from table where row != '' and row2 like '%test%' or like '%test2%'; “或类似”部分不起作用,我猜我使用不正确。您可以这样做: SELECT * FROM table WHERE row != '' AND (row2 like '%test%' OR row2 like '%test2%') Select * from table where row != '' and

我对这个select语句有问题:

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

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

您可以这样做:

SELECT * FROM table
WHERE row != '' AND (row2 like '%test%' OR row2 like '%test2%')
Select * from table where row != '' and (row2 like '%test%' or row2 like '%test2%');

每个或/和操作一件事。正如其他人所指出的,行动顺序很重要。您应该使用
()
对表达式进行分组,以便首先对它们求值。

您可以执行以下操作:

SELECT * FROM table
WHERE row != '' AND (row2 like '%test%' OR row2 like '%test2%')
Select * from table where row != '' and (row2 like '%test%' or row2 like '%test2%');

每个或/和操作一件事。正如其他人所指出的,行动顺序很重要。您应该使用
()
对表达式进行分组,以便首先对表达式求值。

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

select 
      lastname,
      firstname,
      address
   from
      customers
   where
         firstname like 'Bill%'
      OR lastname like '%mar%'
将返回名字以“Bill”开头的任何名字,而不管它以什么结尾(通过“%”通配符)

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

应用的每个“LIKE”子句都是基于您感兴趣的列进行比较的。。。。如果您想为一列测试多个值,那么每次都必须编写它

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

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

select 
      lastname,
      firstname,
      address
   from
      customers
   where
         firstname like 'Bill%'
      OR lastname like '%mar%'
将返回名字以“Bill”开头的任何名字,而不管它以什么结尾(通过“%”通配符)

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

应用的每个“LIKE”子句都是基于您感兴趣的列进行比较的。。。。如果您想为一列测试多个值,那么每次都必须编写它

where
   firstname like 'Bill%'
   or firstname like 'John%'
   or firstname like '%any%'
您错过了second like中的“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%')
Select * from table where row != '' and (row2 like '%test%' or row2 like '%test2%');
请注意括号。

您错过了second like中的“row2”,但您的查询like现在的工作方式也是这样

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%')
Select * from table where row != '' and (row2 like '%test%' or row2 like '%test2%');

请注意括号。

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

SELECT *
  FROM table
 WHERE row != '' 
   AND (row2 LIKE '%test%' OR row2 LIKE '%test2%');
您还缺少OR'd条件中的第二个“行2”


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

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

SELECT *
  FROM table
 WHERE row != '' 
   AND (row2 LIKE '%test%' OR row2 LIKE '%test2%');
您还缺少OR'd条件中的第二个“行2”


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

但是他的问题中缺少一个条件?我说的是
行!=''条件。@RRStoyanov这只是一个如何在同一列上执行两个类似操作的示例。我将更新答案以包含
行!=''条件。这更好:)现在我们有了相同的解决方案:但他的问题中缺少了一个条件?我说的是
行!=''条件。@RRStoyanov这只是一个如何在同一列上执行两个类似操作的示例。我将更新答案以包含
行!=''条件。更好:)现在我们有了相同的解决方案:PHey Dave我从你的问题中删掉了php和编程语言标记,因为这实际上只是关于mysql的。嘿Dave我从你的问题中删掉了php和编程语言标记,因为它实际上只是关于mysql的。