我在使用这个选择语句时遇到了问题:
Select * from table where row != '' and row2 like '%test%' or like '%test2%';
“或者喜欢”部分不起作用,我猜我正在使用它。
答案 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%'