mysql查询不像几个文本匹配

时间:2017-02-23 05:18:53

标签: mysql

我正在尝试进行一个简单的查询,其中有一个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

有没有办法使用"不喜欢"有多场比赛?

2 个答案:

答案 0 :(得分:1)

您可以使用REGEXP进行更改:

SELECT *
FROM yourTable
WHERE country NOT REGEXP '"%USA%"|"%CA%"'

备注:

您不需要在单引号中转义出现在字符串文字内部的双引号。我认为您的原始查询不会运行,因为您需要使用LIKE将列与另一列或字符串文字进行比较,通常使用单引号。

REGEXP不区分大小写,因此我们可以使用usaca获得相同的结果,但在您的情况下这似乎并不重要。

答案 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。