是以下查询
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');
一般来说,这是在MySQL查询中排除某些字符串值的最佳方法吗?
答案 0 :(得分:1)
它们不等同,因为第一个匹配:
Mike
Tom
因为上面的单词中没有A,B和C.但不是
Apple Cobler
其中包含A,B和C.第二个将匹配除<:p>之外的任何内容
a
b
c
我认为你的第二个查询(NOT IN)是排除某些字符串的更好方法,前提是你不需要对可能的值进行通配符匹配。请注意,LIKE子句在性能方面更昂贵,因为它必须对每一行进行直接评估,而不是仅仅命中索引。
答案 1 :(得分: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
答案 2 :(得分:0)
不,两个查询都不相同。
if (field1 = 'abcde')
然后第一个查询将忽略此行,因为'abcde'满足所有条件
abcde Like '%a%'
abcde Like '%b%'
abcde Like '%c%'
但是第二个查询不会忽略结果,因为它将获取字段1不等于a和b和c的所有记录。