我正在尝试进行一个简单的查询,其中有一个where子句,说明两个项目不匹配:
where l.country not like \"%USA%\" or \"%CA%\" ORDER BY l.state
我也尝试过:
where l.country not like \"%USA%\" or l.country not like \"%CA%\" ORDER BY l.state
也尝试过:
where l.country not like (\"%USA%\", \"%CA%\") ORDER BY l.state
有没有办法使用"不喜欢"有多场比赛?
答案 0 :(得分:1)
您可以使用REGEXP
进行更改:
SELECT *
FROM yourTable
WHERE country NOT REGEXP '"%USA%"|"%CA%"'
备注:强>
您不需要在单引号中转义出现在字符串文字内部的双引号。我认为您的原始查询不会运行,因为您需要使用LIKE
将列与另一列或字符串文字进行比较,通常使用单引号。
REGEXP
不区分大小写,因此我们可以使用usa
和ca
获得相同的结果,但在您的情况下这似乎并不重要。
答案 1 :(得分:1)
这是你原来的条件:
where l.country not like "%USA%" or "%CA%" ORDER BY l.state
我认为你打算这意味着"这个国家既不是美国也不是CA."
如果是这样,你会这样写:
where l.country not like '%USA%' and l.country not like '%CA%' ORDER BY l.state
但NOT LIKE 'X' OR 'Y'
的SQL中没有语法。 LIKE
谓词有一个左操作数和一个右操作数,不再有。
您编写的表达式是一个有效的表达式,但不会按照您的想法执行。就好像你写过这样:
where (l.country not like "%USA%") or ("%CA%") ORDER BY l.state
即两个术语,由OR
分隔,第一个是LIKE
比较,第二个是单独的字符串文字。这是表达式中的有效术语,但它没有做任何有用的事情。这就像写作:
x = 6 * 8 + 0
该表达式中零点有什么影响?无。
更新:我错了,我在编写时忽略了查询的一个效果。如果你OR
两个术语,你应该知道在一个布尔表达式中,如果第二个术语总是为真,那么第一个术语是什么并不重要。
WHERE (some expression) OR (TRUE)
这总是如此。
文字字符串'%CA%'
计为true,因为它不是空字符串或NULL。因此,在原始查询中,无论国家/地区是什么,WHERE子句始终为true。