MySQL NOT IN 和 NOT LIKE

标签 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');

一般来说,在 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/

相关文章:

mysql - SQL 查询关于 union 和 concat

mysql - 使用 2 个不同的内部连接列的值选择列的名称和值

mysql - sql不允许在where子句比较中使用case变量

php - MySQL右查询左加入图像表中最新上传的图像,分页

php - Android使用GSON在listview中显示记录

php - Mysql插入被奇怪的字符编码截断的文本数据

mysql - Mysql 获取数据中的意外字段

mysql - 错误 "Ambiguous column name SubscriberKey"

MySQL/SQL 排序依据和条件

mysql - 将 MySQL 模式作为 CoreData 数据模型导入 Xcode