是下面的查询
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 查询中排除某些字符串值的最佳方法是什么?
最佳答案
它们不等价,因为第一个会匹配:
Mike
Tom
因为上面的单词中没有A、B、C。但不是
Apple Cobler
其中包含 A、B 和 C。第二个将匹配除以下内容之外的任何内容:
a
b
c
我认为您的第二个查询(NOT IN)是排除某些字符串的更好方法,前提是您不需要对可能的值进行通配符匹配。请注意,LIKE 子句在性能方面更昂贵,因为它必须对每一行进行直接评估,而不是仅仅命中索引。
关于MySQL NOT IN 和 NOT LIKE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8124634/