mysql的否定就像没有回到什么预期,为什么?

时间:2011-07-08 16:24:42

标签: 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行。

我应该如何写第二个请求以获得我需要的东西?

1 个答案:

答案 0 :(得分:7)

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

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

也许这仅仅是出于说明目的而使用它...
DBA和性能增益建议不要使用SELECT *