是下面的查询相当于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%'
?
是下面的查询相当于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%'
?
第一个查询:
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
没有,无论是查询是不等价的。
if (field1 = 'abcde')
那么第一个查询会忽略此行,因为“ABCDE”满足所有条件
abcde Like '%a%'
abcde Like '%b%'
abcde Like '%c%'
但是第二个查询不会忽视的结果,因为它会获取所有记录,其中场1不等于a和b和c。
他们是不等价的,因为第一个将匹配:
Mike
Tom
由于没有A的,B公司和C公司在上面的话。但不
Apple Cobler
其中包含A,B和C的第二个将匹配任何除外:
a
b
c
我想你第二个查询(NOT IN)是一个更好的办法来排除某些字符串,前提是您不需要对可能的值进行通配符匹配。请注意,LIKE子句在性能方面更加昂贵,因为它必须对每行进行直接评估,而不是仅仅敲击索引。