2011-11-14 195 views
1

是下面的查询相当于MySQL的NOT IN和NOT LIKE

SELECT * FROM items WHERE field1 NOT IN ('a', 'b', 'c'); 

一般来说,这是一个MySQL查询排除某些字符串值的最佳方式

SELECT * FROM items WHERE field1 NOT LIKE '%a%' AND NOT LIKE '%b%' AND 
NOT LIKE '%c%' 

回答

0

第一个查询:

SELECT * FROM items WHERE field1 NOT IN ('a', 'b', 'c'); 

是一样的:

SELECT * FROM items WHERE field1 != 'a' AND field1 != 'b' AND field1 != 'c' 

这样一来,你的两个查询是不等价的。相反,你的第一个查询的,你也可以做这样的事情

SELECT * FROM items WHERE (field1 REGEXP '[abc]') = 0 

manual about REGEXP for more info

1

他们是不等价的,因为第一个将匹配:

Mike 
Tom 

由于没有A的,B公司和C公司在上面的话。但不

Apple Cobler 

其中包含A,B和C的第二个将匹配任何除外:

a 
b 
c 

我想你第二个查询(NOT IN)是一个更好的办法来排除某些字符串,前提是您不需要对可能的值进行通配符匹配。请注意,LIKE子句在性能方面更加昂贵,因为它必须对每行进行直接评估,而不是仅仅敲击索引。