mysql 对 like 的否定没有返回预期的结果,为什么?

标签 mysql sql sql-like

我有一个包含 2796 个条目的 mysql 表。我想选择注释字段中某处不包含单词 SUPPR 的条目。

如果我执行以下操作

SELECT * FROM `catalogues` WHERE notes LIKE "%SUPPR%"

它返回 266 行。但是如果我写下我认为的补充

SELECT * FROM `catalogues` WHERE notes not LIKE "%SUPPR%"

当我期望 2530 (2796-266) 时,它返回 762 行。

我应该如何写第二个请求才能得到我需要的东西?

最佳答案

当您使用 NOT LIKE 时,会隐式排除空值。
您单独处理:

SELECT * 
  FROM `catalogues` 
 WHERE (notes NOT LIKE "%SUPPR%" 
        OR notes IS NULL);

也许这只是为了说明目的,您使用它...
DBA 和性能爱好者建议不要使用 SELECT *

关于mysql 对 like 的否定没有返回预期的结果,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6627448/

相关文章:

sql - 无法使用参数确定SQL Like运算符中的数据类型

mysql - 使用 LIKE '% term %' 的查询非常慢

php - 将 PHP 准备好的语句与 LIKE 结合起来

mysql - 显示像 mysql 中的列一样使用的部分搜索文本?

php - 使用php循环以表格格式显示来自mysql数据库的数据

mysql - 在 Ms. Access 中生成随机字母数字 key

mysql - 将mysql查询转换为rails查询

mysql - 创建新列,并按其顺序递增

mysql - SQL根据两个用户获取特定线程

sql - 如何计算SQL中特定字段的比例?